python - Python - 在单独的线程中运行函数,然后访问它
问题描述
所以我有一个 Python 代码运行一个非常昂贵的函数,该函数有时会按需执行,但它的结果并不是立即需要的(它可以延迟几个周期)。
def heavy_function(arguments):
return calc_obtained_from_arguments
def main():
a = None
if some_condition:
a = heavy_function(x)
else:
do_something_with(a)
问题是每当我计算heavy_function时,程序的其余部分都会挂起。但是,我需要它以空a
值运行,或者更好地让它知道a
正在单独处理,因此不应该被访问。如何将heavy_function移动到单独的进程并一直调用main函数,直到heavy_function执行完毕,然后读取获得的值并在main函数中使用它?
解决方案
你可以使用一个简单的队列。
- 将您
heavy_function
放入一个单独的进程中,只要输入队列中没有输入,该进程就会空闲。用于Queue.get(block=True)
这样做。将计算结果放在另一个队列中。 - 使用空
a
值运行您的正常流程,并不时检查输出队列的空缺。也许while Queue.empty():
在这里使用。 - 如果某个项目变得可用,因为您
heavy_function
已经完成,请切换到使用a
输出队列中的值进行计算。
推荐阅读
- java - 具有多个包含的 XML 模式;在java中验证
- memory - 带有大文件的“文本文件输入”中的 Pentaho GC 开销
- javascript - Instagram 克隆错误:对象作为 React 子项无效
- node.js - 致命错误:MarkCompactCollector:年轻对象提升失败分配失败 - JavaScript 堆内存不足 NodeJS
- automation - 是否可以将 exe 文件反编译回 AMK 文件?
- angular - VS Code 调试器进入 Angular App 中的 skipFiles
- google-cloud-platform - google-cloud-recommendation 有时会返回 UNAUTHENTICATED 错误
- pandas - 如何在熊猫中重新采样索引本身而不是列?
- javascript - 如何从具有多个影子 DOM 的 Web 组件内部创建全局点击侦听器?
- javascript - 如何更新 React 状态下的实体数组?