如何在不阻塞 Python 应用程序的情况下运行代码块?
Posted
技术标签:
【中文标题】如何在不阻塞 Python 应用程序的情况下运行代码块?【英文标题】:How to run a block of code without blocking the application in Python? 【发布时间】:2015-02-06 02:26:53 【问题描述】:我有一个允许您使用 Python 启动脚本的应用程序。我想在应用程序完全初始化后运行一部分代码,但是没有办法知道。
我使用了time.sleep()
,但随后应用程序挂起,直到它执行该代码。我还将代码转移到另一个文件并使用了execfile
,但结果相同。
所以基本上我想要这样的东西:
startup script:
my code
code to run 5 seconds later
实现这一目标的最简单方法是什么?我必须为此使用线程吗?
【问题讨论】:
您使用的是什么应用程序? Maya 3d 应用程序。 我认为线程是最简单的方法:***.com/questions/16691576/… @ZZY:我实际上在一小时前尝试过,但是当我在其他方法中使用 sleep 时它仍然会阻止它。我不知道为什么它不关心它自己的线程,但我假设应用程序本身可能将所有内容封装在一个线程中运行? 也许你可以试试executeInMainThreadWithResult 或executeDeferred。我没有要测试的 Maya 环境 【参考方案1】:在你的startup script
的末尾,它会写入或创建一个包含'initiation complete'
之类的日志文件。
因此,另一个代码将在每 x 毫秒后检查文件是否已创建或文本是否已写入,然后执行其余部分。
【讨论】:
谢谢,但谁来运行检查文件的代码?因为如果我启动它然后代码挂起直到文件被写入,那么应用程序仍然会挂起。 @JoanVenge,您可以将日志文件的循环检查扔给另一个线程或进程,这样您的程序的其余部分就可以运行而不会被阻塞。 谢谢我试过线程的东西,但它没有用。我会研究过程的东西。以上是关于如何在不阻塞 Python 应用程序的情况下运行代码块?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不阻塞的情况下使用 mpd.idle() 从 GTK 轮询 MPD
如何在不阻塞 UI 的情况下正确使用 MagicalRecord 从 Web 服务导入数据
如何在不阻塞的情况下从 Spring Webflux 中的 Mono 对象中提取数据?