def run_multiprocess(func, tasks, *args, **kwargs):
results = []
remains = list(enumerate(tasks))
while remains:
errors = []
with concurrent.futures.ProcessPoolExecutor(max_workers=multiprocessing.cpu_count()) as executor:
futures = [executor.submit(func, *tuple(chain([task], args)), **kwargs) for _, task in remains]
concurrent.futures.wait(futures)
for future, t in zip(futures, remains):
n, task = t
try:
results.append((n, future.result()))
except Exception as e:
errors.append((n, task))
remains = errors
return list(map(lambda x: x[1], sorted(results, key=lambda x: x[0])))
评论列表
文章目录