首页 > 解决方案 > 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函数中使用它?

标签: pythonparallel-processingmultiprocessing

解决方案


你可以使用一个简单的队列。

  1. 将您heavy_function放入一个单独的进程中,只要输入队列中没有输入,该进程就会空闲。用于Queue.get(block=True)这样做。将计算结果放在另一个队列中。
  2. 使用空a值运行您的正常流程,并不时检查输出队列的空缺。也许while Queue.empty():在这里使用。
  3. 如果某个项目变得可用,因为您heavy_function已经完成,请切换到使用a输出队列中的值进行计算。

推荐阅读