即使您只期望返回单个结果,队列是否对多处理有意义?

时间:2014-06-18 05:59:57

标签: python multiprocessing

我想在另一个进程中执行一个函数并返回一个结果(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

3 个答案:

答案 0 :(得分:2)

如果您更喜欢使用Process而不是Pooldocumentation告诉我们有两种方法可以在进程之间交换对象。

第一个是您已经看过的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)