使用多处理或twisted在python中异步生成结果

使用多处理或twisted在python中异步生成结果,python,multiprocessing,twisted,Python,Multiprocessing,Twisted,我有一个令人尴尬的并行应用程序,结果的顺序无关紧要 我有一个函数和一个包含1000个参数的列表。不过,每个函数都返回相当多的数据 我已经编写了一些多处理代码来并行化它 def _process_parallel(func, args_list, args_dict={}): num_tasks = len(args_list) num_tasks_returned_ptr = [0] def _callback(result): num_tasks_ret

我有一个令人尴尬的并行应用程序,结果的顺序无关紧要

我有一个函数和一个包含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
在多重处理中,我似乎找不到解决这个问题的方法。我听说过twisted的优点,但我不确定这项简单的任务是否有过之而无不及

有人知道如何制作一个python生成器来异步计算结果,并在结果出现时生成结果吗

在Python3中:concurrent.futures就是这样。python 2可能有一个后端口,我还没有检查。为什么不直接使用Pool.map而不是Pool.apply\u async呢?因为您只是在等待结果,所以使用异步变量在这里没有什么用处。如果我正确阅读了文档,apply只使用一个worker。
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