我有一个令人尴尬的并行应用,其中结果的顺序并不重要。
我有一个函数和一个1000个参数的列表。每个函数都会返回相当多的数据。
我已经编写了一些多处理代码来并行化它。
def _process_parallel(func, args_list, args_dict={}):
num_tasks = len(args_list)
num_tasks_returned_ptr = [0]
def _callback(result):
num_tasks_returned_ptr[0] += 1
# Send all tasks to be executed asynconously
apply_results = [__POOL__.apply_async(func, args, args_dict, _callback)
for args in args_list]
# Wait until all tasks have been processed
while num_tasks_returned_ptr[0] < num_tasks:
#print('Waiting: ' + str(num_tasks_returned_ptr[0]) + '/' + str(num_tasks))
pass
# Get the results
result_list = [ap.get() for ap in apply_results]
return result_list
我发现内存占用过高。目前,在处理完所有结果之前,不会丢弃这些函数的结果。
我想要做的是在结果执行后不存储的结果。像这样:
def _process_parallel(func, args_list, args_dict={}):
# Send all tasks to be executed asynconously
for result in somepackage.apply_async(func, args, args_dict, _callback):
yield result
我似乎无法在多处理中找到解决方法。我听说过扭曲的好事,但我不确定这个简单的任务是否有些过分。
有没有人知道如何制作一个python生成器来异步计算结果并在它们进来时产生它们?