请问:Python的multi-processing模块怎么让快的任务等待慢的任务?

请教一个Python的multi-processing模块互相等待、防止竞争的问题。现在我有2个任务,任务1和任务2,要么1比2快、要么2比1快。现在要并发同时执行2个任务,快的完毕之后等待慢的。等待2个任务都结束之后,然后系统再转而运行第3个任务。

我尝试了一下apply_async:

import time
from multiprocessing import Pool

def func1():
    print "This starts task1."
    time.sleep(1)
    print "This ends task1."
def func2():
    print "This starts task2."
    time.sleep(2)
    print "This ends task2."
def func3(x):
    print x
    
pool = Pool(processes=3)
result = pool.apply_async(func1, func2)
pool.start()
pool.join()

我觉得还是不对,但是不清楚正确的应该怎么写。另外,平台是Python2.7,所以高级一点的Asyncio就没法用了。请问这个快的等待慢的、然后两个全部结束后再运行新任务的并发执行应该怎么设计呢?

谢谢了先!

阅读 2.7k
1 个回答

apply_async(func[, args[, kwds[, callback]]])
你的用法明显不对吗。

import time
from multiprocessing import Pool

def func(n):
    print "This starts task{}.".format(n)
    time.sleep(n)
    print "This ends task{}.".format(n)

    
pool = Pool(processes=3)
pool.map(func, range(3))
pool.join()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题