我是 Python 中多处理的新手,并试图弄清楚是否应该使用 Pool 或 Process 来异步调用两个函数。我有两个函数进行 curl 调用并将信息解析为 2 个单独的列表。根据互联网连接,每个功能可能需要大约 4 秒。我意识到瓶颈在于 ISP 连接,多处理不会加快速度,但让它们都启动异步会很好。另外,这对我来说是一个很好的学习经验,可以让我进入 python 的多处理,因为我以后会更多地使用它。
我读过Python multiprocessing.Pool:何时使用 apply、apply_async 或 map?它很有用,但仍然有我自己的问题。
所以我可以做到的一种方法是:
def foo():
pass
def bar():
pass
p1 = Process(target=foo, args=())
p2 = Process(target=bar, args=())
p1.start()
p2.start()
p1.join()
p2.join()
我对这个实现的问题是: 1)因为 join 阻塞直到调用进程完成......这是否意味着 p1 进程必须在 p2 进程启动之前完成?我一直理解 .join() 与 pool.apply() 和 pool.apply_sync().get() 相同,其中父进程在当前运行完成之前无法启动另一个进程(任务)。
另一种选择是:
def foo():
pass
def bar():
pass
pool = Pool(processes=2)
p1 = pool.apply_async(foo)
p1 = pool.apply_async(bar)
我对这个实现的问题是:1)我需要一个pool.close(),pool.join()吗?2) pool.map() 在我得到结果之前会让它们全部完成吗?如果是这样,它们是否仍然异步运行?3) pool.apply_async() 与使用 pool.apply() 执行每个进程有何不同 4) 这与使用 Process 的先前实现有何不同?