私はワーキングプール内の生成されたプロセスの実行を新しいシステム端末に結合しようとしています。次の例(@ sylvain-lerouxの回答からthis質問に適合)では、キューに入れられたオブジェクトを使って作業を行うワーカーのプールが構築されています。マルチプロセッサで各ワーカーを起動するにはどうすればいいですか?新しいシェルの中の?
import os
import time
import multiprocessing
# A main function, to be run by our workers.
def worker_main(queue):
print('The worker at', os.getpid(), 'is initialized.')
while True:
# Block until something is in the queue.
item = queue.get(True)
print(item)
time.sleep(0.5)
if __name__ == '__main__':
# Instantiate a Queue for communication.
the_queue = multiprocessing.Queue()
# Build a Pool of workers, each running worker_main.
the_pool = multiprocessing.Pool(3, worker_main, (the_queue,))
# Iterate, sending data via the Queue.
for i in range(5):
the_queue.put("That's a nice string you got there.")
the_queue.put("It'd be a shame if something were to... garble it.")
worker_pool.close()
worker_pool.join()
time.sleep(10)
あなたがシステム端末からこれを実行した場合、労働者のそれぞれが、同じコンソールをに書き出し、およびで実行されているので、あなたが、文字化けしたテキストの束が表示されます。私が取り組んでいるプロジェクトでは、新しいシェル/コンソールを起動して各ワーカープロセスをホストすると便利です。すべての出力がそのシェルに表示され、ワーカープロセスの実行はそのシェルでホストされます。私はshell
キーワードを使ってPopen
を使っていくつかの例を見てきましたが、互換性の制約のためにプールベースの実装に固執する必要があります。そこに誰かがこれをしましたか?ガイダンスは高く評価されます。
Linuxでは、分離したファイルに書き込んで、手動でシェル 'watch -n 1 cat file.txt'を使ってファイルの新しい内容を1秒ごとに表示することができます。 – furas
ありがとう@furas。それは知っておくと便利なイディオムです。私は通常Linuxで作業しますが、私はこのソリューションをクロスプラットフォームで拡張性のあるものにしたいと考えています。また、これにより私は印刷された情報にアクセスすることができますが、アプリケーションが実行するのに望ましい実行シェルに結びついてしまうことはありません。 –