如何在不阻塞 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 应用程序的情况下运行代码块?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不阻塞 UI 的情况下创建 UIView

如何在不阻塞的情况下使用 mpd.idle() 从 GTK 轮询 MPD

如何在不阻塞 UI 的情况下正确使用 MagicalRecord 从 Web 服务导入数据

如何在不阻塞的情况下从 Spring Webflux 中的 Mono 对象中提取数据?

如何在不从终端或任何编辑器执行的情况下运行 python 程序 [重复]

如何在不阻塞的情况下从 Flux 获取列表?