gpt4 book ai didi

python - pygtk 应用程序中的单独线程

转载 作者:太空狗 更新时间:2023-10-30 02:06:47 24 4
gpt4 key购买 nike

我在处理我的 pyGTK 应用程序时遇到了一些问题。我给线程一些时间来完成它的任务,如果有问题我只是继续但警告用户。但是,一旦我继续,该线程就会停止,直到调用 gtk.main_quit 为止。这让我很困惑。

相关代码:

class MTP_Connection(threading.Thread):
def __init__(self, HOME_DIR, username):
self.filename = HOME_DIR + "mtp-dump_" + username
threading.Thread.__init__(self)

def run(self):
#test run
for i in range(1, 10):
time.sleep(1)
print i

......................................

start_time = time.time()
conn = MTP_Connection(self.HOME_DIR, self.username)
conn.start()
progress_bar = ProgressBar(self.tree.get_widget("progressbar"),
update_speed=100, pulse_mode=True)
while conn.isAlive():
while gtk.events_pending():
gtk.main_iteration()
if time.time() - start_time > 5:
self.write_info("problems closing connection.")
break
#after this the program continues normally, but my conn thread stops

最佳答案

首先,不要继承threading.Thread,使用Thread(target=callable).start()

其次,可能是你的明显阻塞的原因是 gtk.main_iteration 有一个参数 block,它默认为 True,所以当没有要迭代的事件时,您对 gtk.main_iteration 的调用实际上会阻塞。可以通过以下方式解决:

gtk.main_iteration(block=False)

但是,没有真正的解释为什么您会使用这个被黑掉的循环而不是实际的 gtk 主循环。如果您已经在主循环中运行它,那么我建议您做错了事。如果您向我们提供更多详细信息和/或完整示例,我可以扩展您的选择。

第三,这只是后来才出现的:总是总是总是总是确保你调用了gtk.gdk.threads_init 在任何带线程的 pygtk 应用程序中。 GTK+ 在线程化运行时有不同的代码路径,需要知道如何使用它们。

我写了a small article about pygtk and threads它为您提供了一个小的抽象,因此您不必担心这些事情。该帖子还包含一个进度条示例。

关于python - pygtk 应用程序中的单独线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/685224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com