mar*_*lon 7 python threadpoolexecutor
from concurrent.futures import ThreadPoolExecutor, as_completed
def add_one(number, n):
return number + 1 + n
def process():
all_numbers = []
for i in range(0, 10):
all_numbers.append(i)
threads = []
all_results = []
with ThreadPoolExecutor(max_workers=10) as executor:
for number in all_numbers:
threads.append(executor.submit(add_one, number))
for index, task in enumerate(as_completed(threads)):
result = task.result()
#print(result)
all_results.append(result)
for index, result in enumerate(all_results):
print(result)
process()
Run Code Online (Sandbox Code Playgroud)
如果我设置max_works=1,则会按顺序打印出1到10;如果我设置 max_workers = 10,则顺序可能是随机的:
5
3
10
7
1
8
6
2
4
9
Run Code Online (Sandbox Code Playgroud)
当使用 ThreadPoolExecutor 处理项目列表时,如何保持输入的原始顺序(如本例所示)?
您可以使用ThreadExecutor的map方法:
from concurrent.futures import ThreadPoolExecutor, as_completed
def add_one(number):
return number + 1
def process():
all_numbers = []
for i in range(0, 10):
all_numbers.append(i)
all_results = []
with ThreadPoolExecutor(max_workers=10) as executor:
for i in executor.map(add_one, all_numbers):
print(i)
all_results.append(i)
for index, result in enumerate(all_results):
print(result)
process()
Run Code Online (Sandbox Code Playgroud)
根据评论要求更新答案:
from concurrent.futures import ThreadPoolExecutor, as_completed
def add_one(args):
return args[0] + 1 + args[1]
def process():
all_numbers = []
for i in range(0, 10):
all_numbers.append([i, 2])
all_results = []
with ThreadPoolExecutor(max_workers=10) as executor:
for i in executor.map(add_one, all_numbers):
print(i)
all_results.append(i)
for index, result in enumerate(all_results):
print(result)
process()
Run Code Online (Sandbox Code Playgroud)