我想在另一个进程中执行一个函数并返回一个结果(true或false)。我知道the common way of getting results back from multiprocessing正在使用一个队列,但如果我只期待一个结果回来会有意义吗?
p = Process(target=my_function_that_returns_boolean, args=(self, args))
p.start()
p.join()
# success = p.somehow_get_the_result_back
答案 0 :(得分:2)
如果您更喜欢使用Process
而不是Pool
,documentation告诉我们有两种方法可以在进程之间交换对象。
第一个是您已经看过的Queue
。
第二个是Pipe
,文档提供了一个示例。我稍微修改了示例,以显示返回布尔值的情况。
from multiprocessing import Process, Pipe
def Foo(conn):
# Do necessary processing here
# ....
# Instead of Return True, we send true
#return True
conn.send(True)
parent_conn, child_conn = Pipe()
p = Process(target=Foo, args=(child_conn,))
p.start()
print parent_conn.recv()
p.join()
答案 1 :(得分:1)
队列用于在并行环境中同步对共享资源的访问。常见场景是指许多工作人员从共享池中消耗任务,或者当一个执行行创建任务而另一个执行行消耗任务时。
如果我理解正确,这不是问题。所以不需要使用队列。您需要的唯一同步机制是告诉一个进程另一个完成的同步机制。这是通过使用join()
。
除非存在真正的问题,否则请尽量保持简单。
答案 2 :(得分:0)
您可以使用Pool
返回AsyncResult对象
from multiprocessing import Pool
pool = Pool(processes=1)
result = pool.apply_async(my_function_that_returns_boolean, [(self, args),])
success = result.get(timeout=None)