私は基本的に無限ループを実行しているコードを持っており、ループの各反復でいくつかの命令を実行します。これらの命令の中には、マルチプロセッシングを使って行う「並列」で実行するものがあります。Python:無限ループ内のマルチスレッド
from multiprocessing import Pool
from multiprocessing.dummy import Pool as ThreadPool
def buy_fruit(fruit, number):
print('I bought '+str(number)+' times the following fruit:'+fruit)
return 'ok'
def func1(parameter1, parameter2):
myParameters=(parameter1,parameter2)
pool= Threadpool(2)
data = pool.starmap(func2,zip(myParameters))
return 'ok'
def func2(parameter1):
print(parameter1)
return 'ok'
while true:
myFruits=('apple','pear','orange')
myQuantities=(5,10,2)
pool= Threadpool(2)
data = pool.starmap(buy_fruit,zip(myFruits,myQuantities))
func1('hello', 'hola')
私はメインループ内のマルチプロセスを持っているので、それは、少し厄介だ同意するだけでなく、関数内:ここに私のコードの構造の一例です。
ループが数分を実行し、私はエラーを取得するまで、それですべてが、うまく機能: 「はRuntimeError:新しいスレッドを起動することはできません」
を、私はこれは私が持っているという事実によるものであることを、オンラインで見ましたスレッドが多すぎます。
各ループの終了までにすべてのスレッドを閉じる最も簡単な方法は何ですか?新しいループの反復の開始時に「フレッシュ」を再開できますか?
お時間をいただきありがとうございます。
ベスト、 ジュリア
PS:コード例は一例であり、私の本当の機能は、各ループの中で多くのスレッドを開き、各機能を実行するために数秒かかります。
プールの_join()_機能を見て、これは、あなたがループの外スレッドプールを作成することもできます – Minato
探しているものかもしれません。 CPUバインドされたスレッドのコンテキストで_globalインタプリタlock_を読んでみてください。 – moooeeeep