小编典典

python generator:并行解压整个发电机

python

假设我有一个生成器,其__next__()功能有些昂贵,我想尝试并行化调用。我应该在哪里抛出并行化?

为了更具体一点,请考虑以下示例:

# fast, splitting a file for example
raw_blocks = (b for b in block_generator(fin))
# slow, reading blocks, checking values ...
parsed_blocks = (block_parser(b) for b in raw_blocks)
# get all parsed blocks into a data structure
data = parsedBlocksToOrderedDict(parsed_blocks)

最基本的是将第二行更改为进行并行化的内容。是否有一些生成器魔咒可以使发电机(在第3条)线上并行打开包装?__next__()并行呼叫?


阅读 215

收藏
2021-01-20

共1个答案

小编典典

不能。您必须next()顺序调用,因为任何非平凡的生成器的下一个状态都由其当前状态决定。

def gen(num):
    j=0
    for i in xrange(num):
        j += i
        yield j

如果不知道在每个生成器产生值的状态,就无法并行化对上述生成器的调用。但是,如果您知道这一点,则无需运行它。

2021-01-20