次の()関数が多少高価で、呼び出しを並列化しようとしているジェネレータがあるとします。私はどこでパラレル化をスローしますか?もう少し具体的にpython generator:ジェネレータ全体を並列に展開する
、この例を考えてみます。
# 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)
最も基本的なものは、並列化を行い何かに第2ラインを変更することです。いくつかのジェネレータマジックは、ジェネレータ(3番目のライン)を並列にアンパックできるようにしていますか?並行してを次に()と呼んでいますか?
一般的に、私はこれを控えるでしょう。 interalの腸は、非常にステートフルであり、スレッドが危険です。代わりにジェネレータ自体を改善することを検討してください(単純なジェネレータ式ではないが、それを行うには関連するコードでスレッドセーフティが必要な場合でも)。 – delnan
私はあなたの答えに解決策を挙げたと思います。 'block_parser'への呼び出しを並列化します。 – agf