私はPythonマルチプロセッシングモジュールを使用してプロセスを作成したいので、それをより大きなスクリプトの一部にしたいと思います。 (私もそれから、他の多くのことをしたいが、今、私はこのために解決されます)私はmultiprocessing docsから最も基本的なコードをコピーして、少ししかし複数の処理コードが繰り返し実行される
、すべてif __name__ == '__main__':
の外にそれを修正
p.join()が呼び出されるたびにがと繰り返されます。
これは私のコードです:
from multiprocessing import Process
data = 'The Data'
print(data)
# worker function definition
def f(p_num):
print('Doing Process: {}'.format(p_num))
print('start of name == main ')
if __name__ == '__main__':
print('Creating process')
p = Process(target=f, args=(data,))
print('Process made')
p.start()
print('process started')
p.join()
print('process joined')
print('script finished')
これは私が期待したものである:
The Data
start of name == main
Creating process
Process made
process started
Doing Process: The Data
process joined
script finished
Process finished with exit code 0
これは現実です:
The Data
start of name == main
Creating process
Process made
process started
The Data <- wrongly repeated line
start of name == main <- wrongly repeated line
script finished <- wrongly executed early line
Doing Process: The Data
process joined
script finished
Process finished with exit code 0
これがif
ステートメントまたはp.join()
またはそれ以外のもので、拡張子がであるかどうかは、が原因であるかどうかはわかりません。何か説明してもらえますかはこれを引き起こしました。なぜ?
私の問題を再現できない人もいるので分かりやすいが、私は持っている。私はWindows Server 2012 R2 Datacenterを使用しており、Python 3.5.3を使用しています。
マルチプロセッシングモジュールを使用すると、全く新しいpythonプロセスが作成されます。つまり、pythonスクリプトは本質的に複製されています。唯一の違いは、新しく作成されたプロセスにはターゲットメソッドがあり、そのターゲットは実行されたものです。関数定義の外にあるすべてのコードは、Pythonスクリプトが動作するのと同じ方法で実行されます。それは私の理解です。 – Peter
結果を再現できません。コードは私のマシン上で正常に動作し、またhttp://www.tutorialspoint.com/execute_python_online.php?PID=0Bw_CjBb95KQMVFJETFNzZG1rX1U – aristotll
@aristotll私はそれがオンラインで動作する理由をexaplainできませんが、私はここで2台のコンピュータでこれを実行し、毎回失敗します - しかし、それほど少なくない、チェックのおかげで。 –