首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行线程时,Python GUI不响应

执行线程时,Python GUI不响应
EN

Stack Overflow用户
提问于 2012-11-26 22:21:19
回答 2查看 831关注 0票数 2

我有Python GUI,在一个for循环中,我从一些dll调用函数,该函数返回用于逐行填充tableWidget的值。所有这些都运行得很好,除了我不能在它还在填充的时候滚动表格(虽然dll函数计算每行7-8秒),所以我试着像这样处理线程:

代码语言:javascript
复制
q = Queue.Queue()
for i in (0, numberOfRows):
    threading.Thread(target=self.callFunctionFromDLL, args=(arg1,arg2, q)).start()
    result = q.get()
    ... do something with "result" and populate table row....


def callFunctionFromDLL(self, arg1, arg2, q):
    result = self.dll.functionFromDLL(arg1, arg2)
    q.put(result)

但是,图形用户界面仍然没有响应,直到从q.get传递结果(functionFromDLL工作7-8秒,然后在图形用户界面填充行时,我可以滚动表格)。我以前并没有真正使用过线程,所以任何关于如何做到这一点的建议或例子都将不胜感激。

我也尝试过这种方法,同样的事情,当functionFromDLL工作时,gui仍然没有响应:

代码语言:javascript
复制
for i in (0, numberOfRows):
    t = threading.Thread(target=self.callFunctionFromDLL, args=(arg1,arg2))
    t.start()
    t.join()
    result = self.result
    ... do something with "result" and populate table row....


def callFunctionFromDLL(self, arg1, arg2):
    self.result = self.dll.functionFromDLL(arg1, arg2)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-27 23:10:57

如果您使用的是tkinter模块,那么您也许能够从Directory Pruner 4的实现中获得一些帮助。为了解决大多数GUI库不能很好地处理线程的问题,该配方使用了代码下面列出的一些自定义模块。模块affinitythreadboxsafetkinter为程序使用的GUI库提供了线程安全的包装。

票数 2
EN

Stack Overflow用户

发布于 2012-11-26 22:24:32

CPython (你可能已经有了)有一个全局解释器锁,它可以击败很多多线程。这是一个已被证明难以解决的已知问题。(更多信息请查看"Python GIL“。)其他一些实现,比如Jython,就没有这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13566751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档