私は初心者のためにライブラリを使いました。私はPythonでマルチプロセッシングモジュールを使用しています。例としてimporting and using a module that uses multiprocessing without causing infinite loop on WindowsWindowsで新しいプロセスを開始すると、Pythonのマルチプロセッシングモジュールが__main__をインポートするのはなぜですか?
、私はモジュールmylibrary.py
持っているとします:私はこの問題に遭遇した私は上main.py
を実行する場合
# main.py
import mylibrary
mylibrary.foo()
:
# mylibrary.py
from multiprocessing import Process
class MyProcess(Process):
def run(self):
print "Hello from the new process"
def foo():
p = MyProcess()
p.start()
そして、このライブラリを呼び出すメインプログラムをWindowsでは、main.pyを新しいプロセスにインポートしようとします。つまり、コードが再度実行され、プロセス生成の無限ループが発生します。私はそうのようにそれを修正することができます:
import mylibrary
if __name__ == "__main__":
mylibrary.foo()
しかし、これは初心者のためにかなり混乱して、そしてそれは必要ありませんように。また、それはそうです。新しいプロセスがmylibrary
に作成されているので、なぜ新しいプロセスがmylibrary
をインポートしないのですか? main.py
を変更せずにこの問題を回避する方法はありますか?
私はPython 2.7を使っています。
この回答は受け入れる必要があります。 – Marcin
私は何かが不足していると確信していますが、なぜ私の質問は、子プロセスがすべてのコードを再度実行しなければならないかということです。なぜ新しいプロセスを開始したモジュールだけではないのですか? – Laura
@Laura:すべてのコードを再度実行しなければなりません。なぜなら、そうでなければ、あなたのコードを持たないからです。子プロセスは完全に新しく始まり、関数が必要な場合は、コードが必要です。 –