gpt4 book ai didi

python - multiprocessing pool.map 未按顺序处理列表

转载 作者:太空狗 更新时间:2023-10-30 00:09:36 26 4
gpt4 key购买 nike

我有这个脚本来并行处理一些 url:

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)

列表是有序的,但是当我运行它时,脚本不会按顺序从列表中选择 url:

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 页,然后继续按照列表中的顺序进行处理。有没有办法做到这一点?

最佳答案

如果您不传递参数 chunksize,则 map 将使用此算法计算 block :

chunksize, extra = divmod(len(iterable), len(self._pool) * 4)
if extra:
chunksize += 1

它将您的可迭代对象切割成 task_batches 并在单独的进程中运行它。这就是为什么它不按顺序排列的原因。解决方案是将 block 大小声明为 1。

import multiprocessing
import time

list_test = range(10)

def process(task):
print "task:", task
time.sleep(1)

pool = multiprocessing.Pool(processes=3)
pool.map(process, list_test, chunksize=1)

task: 0
task: 1
task: 2
task: 3
task: 4
task: 5
task: 6
task: 7
task: 8
task: 9

关于python - multiprocessing pool.map 未按顺序处理列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40684168/

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