Python-在单独的线程中运行函数,然后对其进行访问

时间:2018-10-28 14:34:01

标签: python parallel-processing multiprocessing

因此,我有一个运行着非常昂贵的函数的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函数中?

1 个答案:

答案 0 :(得分:0)

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

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