不处理名单我有这样的脚本来处理某些URL并行:多pool.map为了
import multiprocessing
import time
list_of_urls = []
for i in range(1,1000):
list_of_urls.append('http://example.com/page=' + str(i))
def process_url(url):
page_processed = url.split('=')[1]
print 'Processing page %s'% page_processed
time.sleep(5)
pool = multiprocessing.Pool(processes=4)
pool.map(process_url, list_of_urls)
列表是有序的,但是当我运行它,该脚本不挑从网址列表为了:
Processing page 1
Processing page 64
Processing page 127
Processing page 190
Processing page 65
Processing page 2
Processing page 128
Processing page 191
而是,我想先处理页面1,2,3,4,然后继续按照列表中的顺序。有没有这样做的选择?
你是说你想将任务分解到多个内核,但仍然按顺序运行吗?或者,您想要按正确顺序处理已处理的网址的输出列表。你的问题建议第一个。 –
第一个。就像你会在下载管理器中设置“最大并行下载”一样,但它们仍然按顺序运行。我想要处理4个URL,例如:从1,2,3,4开始。如果3完成并且1,2,4仍在运行,请启动第5个(http://example.com/page=5) – Hyperion
但是,如果您的辅助函数具有返回值,则返回值的结果列表的顺序对应于输入参数列表的顺序。即使工作人员的功能是无序处理的。 – elcombato