栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

PySide / PyQt-启动占用大量CPU的线程会挂起整个应用程序

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PySide / PyQt-启动占用大量CPU的线程会挂起整个应用程序

这可能是由于持有Python的GIL的工作线程引起的。在某些Python实现中,一次只能执行一个Python线程。GIL阻止其他线程执行Python代码,并在不需要GIL的函数调用期间被释放。

例如,由于IO是由操作系统而不是Python解释器处理的,因此在实际IO期间会释放GIL。

解决方案:

  1. 显然,您可以

    time.sleep(0)
    在工作线程中使用以屈服于其他线程(根据此SO问题)。您将必须定期调用
    time.sleep(0)
    自己,并且GUI线程仅在后台线程调用此函数时运行。

  2. 如果辅助线程足够独立,则可以将其置于完全独立的进程中,然后通过在管道上发送腌制对象进行通信。在前台进程中,创建一个工作线程来与后台进程进行IO。由于工作线程将执行IO而不是CPU操作,因此它将不保存GIL,这将为您提供完全响应的GUI线程。

  3. 某些Python实现(JPython和IronPython)没有GIL。

CPython 中的 线程
仅对多路IO操作非常有用,而对于将CPU密集型任务放在后台并不有用。对于许多应用程序而言,CPython实现中的线程从根本上被破坏了,并且在可预见的未来很可能会保持这种状态。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/645389.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号