gpt4 book ai didi

python2.7 多进程池异步与同步

转载 作者:太空宇宙 更新时间:2023-11-04 03:53:46 27 4
gpt4 key购买 nike

大量文档编写:“apply”用于同步,而“apply_async”用于异步。我阅读了多处理的源代码(在文件 multiprocessing/pool.py 中),它说:

def apply(self, func, args=(), kwds={}):
assert self._state == RUN
return self.apply_async(func, args, kwds).get()

...
def apply_async(self, func, args=(), kwds={}, callback=None):
assert self._state = RUN
....
return result

apply好像只是调用了apply_async,唯一不同的是它们的返回值。

所以我的问题是:

同步和异步之间的真正区别是什么?为什么?

最佳答案

巨大的区别在于末尾的 .get():

    return self.apply_async(func, args, kwds).get()

apply_async() 本身不会阻塞调用者:对 apply_async() 的调用会立即返回,并返回一个 AsyncResult对象。此类对象(除其他外)具有 .get() 方法,该方法阻塞直到调用的进程完成运行 func(*args, **kwds) 并返回其结果。

由于 apply() 阻塞直到结果准备好,如果您只使用 apply(),则不可能让多个客户端进程同时工作。有时这就是您想要的,但通常不是。使用 apply_async(),您可以并行触发任意数量的任务,并在稍后检索它们的结果。

关于python2.7 多进程池异步与同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851390/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com