私は(多かれ少なかれ)解決する簡単な問題を抱えています
。Pythonマルチプロセッシングチュートリアルを見ると、多かれ少なかれ次のようにプロセスを開始する必要があることがわかります。
from multiprocessing import *
def u(m):
print(m)
return
A=Process(target=u,args=(0,))
A.start()
A.join()
0 が出力されるはずですが、何も出力されません。代わりに、A.join()
.
私が手動で機能を開始した場合、これを行っています
A.run()
実際にはシェルに 0 を
出力しますが、次のコードの出力など、同時には機能しません。
from multiprocessing import *
from time import sleep
def u(m):
sleep(1)
print(m)
return
A=Process(target=u,args=(1,))
A.start()
print(0)
0
1である必要があります
でも実際は
0
最後の行の前に追加すると
A.run()
その後、出力は
1
0になります
これは私には紛らわしいようです...
プロセスに参加しようとすると、永遠に待機します。
ただし、回答を得るのに役立つ場合は、
私のOSはMac os x 10.6.8
です使用されているPythonのバージョンは3.1と3.3です
私のコンピューターには1つのインテルコアi3プロセッサーがあります
--更新--
この奇妙な動作は、IDLE からプログラムを起動した場合にのみ発生することに気付きました。端末からプログラムを実行すると、すべてが想定どおりに機能するため、この問題は IDLE バグに関連している必要があります。
しかし、端末からプログラムを実行するのはさらに奇妙です。 range(100000000) のようなものを使用すると、プログラムの最後までコンピューターのすべての RAM がアクティブになります。私がよく覚えていれば、これはpython 3では発生せず、古いpythonバージョンでのみ発生するはずです。これらの新しい情報が答えを出すのに役立つことを願っています
--Update 2--
これを設定しているため、プロセスから出力を実行しなくてもバグが発生します。
def u():
return
プロセスのターゲットとしてそれを開始し、プロセスに参加しようとすると、アイドル状態が永遠に待機します