[英]Multiprocessing Pool return results as available
我正在尝试实现多处理并努力达到我需要的目标。
因此,在某些背景下,我之前曾使用Celery进行过多处理,因此我习惯于将作业发送给工人,并在完成时进行轮询,即使正在执行其他作业,也可以获得作业的结果。 我正在尝试将此与多处理相关联。 这是我到目前为止的内容,是从我发现的各个站点中挖掘出来的...
import urllib2
import time
from multiprocessing.dummy import Pool as ThreadPool
import random
def openurl(url):
time.sleep(random.randrange(1,10))
print url
return urllib2.urlopen(url)
urls = [
'http://www.python.org',
'http://www.python.org/about/',
'http://www.onlamp.com/pub/a/python/2003/04/17/metaclasses.html',
'http://www.python.org/doc/',
'http://www.python.org/download/',
'http://www.python.org/getit/',
'http://www.python.org/community/',
'https://wiki.python.org/moin/',
'http://planet.python.org/',
'https://wiki.python.org/moin/LocalUserGroups',
'http://www.python.org/psf/',
'http://docs.python.org/devguide/',
'http://www.python.org/community/awards/'
# etc..
]
pool = ThreadPool(20)
results = pool.map(openurl, urls)
pool.close()
pool.join()
print 'now what'
因此,我在URL上启动了openurl函数,但是如果我在“ print'now what”(打印“现在做什么”)处中断,则直到我完成所有作业后,该函数才在那里中断。
如何“轮询”线程并在线程输入结果时返回结果?
谢谢!
pool.map
将可迭代元素分布在“工作池”上,并在所有准备就绪时汇总结果。
此外, pool.close
和pool.join
指示Pool等待直到所有任务完成。
如果要处理结果,请使用pool.apply_async
并使用回调。 或者,您可以收集pool.apply_async
返回的AsyncResult对象,并对其进行迭代以查看每个对象何时准备就绪,但是整个逻辑将非常麻烦。
from multiprocessing.pool import ThreadPool
pool = ThreadPool(20)
tasks = []
def callback(result):
# handle the result of your function here
print result
for url in urls:
pool.apply_async(openurl, args=[url], callback=callback)
pool.close()
pool.join()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.