3

Parallel Pythonでは、渡された関数がそのジョブ送信呼び出しで変数と名前空間とともに必要とするモジュールをラップする必要があるのはなぜですか?モジュールレベルの「グローバル」変数を保持する必要があるのでしょうか。(それが起こっているすべてである場合)

送信機能:

submit(self, func, args=(), depfuncs=(), modules=(), callback=None, callbackargs=(),group='default', globals=None)
    Submits function to the execution queue

    func - function to be executed
    args - tuple with arguments of the 'func'
    depfuncs - tuple with functions which might be called from 'func'
    modules - tuple with module names to import
    callback - callback function which will be called with argument 
        list equal to callbackargs+(result,) 
        as soon as calculation is done
    callbackargs - additional arguments for callback function
    group - job group, is used when wait(group) is called to wait for
    jobs in a given group to finish
    globals - dictionary from which all modules, functions and classes
    will be imported, for instance: globals=globals()
4

1 に答える 1

3

このように動作する理由ppは、すべてのワーカーに対して Python インタープリターの新しいインスタンスを作成するためです。これは、以前または以降に実行されたものから完全に独立しています。__future__これにより、インポートがワーカー プロセスでアクティブになるなど、意図しない副作用が発生しなくなります。これの問題は、物事を正しく行うのがはるかに複雑になることであり、私の経験ではpp、特に堅牢ではありません。ユーザーにとって物事を少し簡単にしようとしますが、それを行う努力で解決するよりも多くの問題を引き起こすようですpp .

最初からクラスターで使用するように設計されたコードを作成するとしたら、最終的に を使用することになるでしょうppが、既存のコードを使用するように適応させることppは悪夢であることがわかりました。

于 2010-11-03T13:54:36.493 に答える