Python-多处理中的生成器(收益)

时间:2019-03-04 10:14:57

标签: python python-multiprocessing

我有一个用例,其中有两个作业,分别称为cpu_operationexpensive_gpu_operation,每个作业都占用大量CPU并需要很长时间。

expensive_gpu_operation,取决于cpu_operation的输出。因此,鉴于我要实现的多个过程,就是expensive_gpu_operation正在处理任务N时,cpu_operation已经开始在N + 1上工作。

没有生成器,此代码有效cpu_operation没有状态,并且每次都从头开始执行-我需要它成为生成器

from multiprocessing.pool import Pool
from time import sleep


def cpu_operation(task):
    print('START CPU TASK {}'.format(task))
    sleep(5)
    print('END CPU TASK {}'.format(task))
    return '-{}-'.format(task)

def expensive_gpu_operation(task):
    print('GPU TASK {}'.format(task))



def quick():
    pool = Pool(processes=1)
    results = []
    for task in range(5):
        cpu_result = cpu_operation(task)
        async_result = pool.apply_async(expensive_gpu_operation, (cpu_result, ))
        results.append(async_result)

    return [x.get() for x in results]

这里的问题是cpu_operation是“无状态的”,我需要它成为生成器。方法cpu_operationexpensive_gpu_operation都必须是“有状态的”,但是expensive_gpu_operation本身是“有状态的”,因为它在始终存在的主进程上运行。

我该如何实现?

this SO question中的解决方案似乎实际上在返回结果之前耗尽了整个生成器-这不是我的目标。我需要将每个产生的值立即传递给expensive_gpu_operation

0 个答案:

没有答案