27

私は初心者向けのライブラリをいじっており、Python でマルチプロセッシング モジュールを使用しています。この問題に遭遇しました: Windows で無限ループを引き起こすことなくマルチプロセッシングを使用するモジュールをインポートして使用する

例として、モジュールがあるとしますmylibrary.py:

# mylibrary.py

from multiprocessing import Process

class MyProcess(Process):
    def run(self):
        print "Hello from the new process"

def foo():
    p = MyProcess()
    p.start()

そして、このライブラリを呼び出すメイン プログラム:

# main.py

import mylibrary

mylibrary.foo()

Windows で実行するmain.pyと、main.py を新しいプロセスにインポートしようとします。つまり、コードが再度実行され、プロセス生成の無限ループが発生します。次のように修正できます。

import mylibrary

if __name__ == "__main__":
    mylibrary.foo()

しかし、これは初心者にとってかなり紛らわしいですし、その必要はないようです。で新しいプロセスが作成されているmylibraryのに、なぜ新しいプロセスがインポートされないのmylibraryですか? 変更せずにこの問題を回避する方法はありmain.pyますか?

ちなみに、私はPython 2.7を使用しています。

4

1 に答える 1

40

Windowsにはがないforkため、既存のプロセスと同じように新しいプロセスを作成する方法はありません。したがって、子プロセスはコードを再度実行する必要がありますが、親プロセスと子プロセスを区別する方法が必要です__main__

これについては、次のドキュメントで説明されています:http ://docs.python.org/2/library/multiprocessing.html#windows

フォーク爆弾の影響を回避するためにコードを構造化する別の方法を知りません。

于 2013-01-05T19:18:16.337 に答える