2 つの主要なタスクを実行する Python スクリプトがあります。
- スクリプト自体からコードを実行する
- バックグラウンドプロセスを起動します
multiprocessing.Process(target=...)
私の質問は:stdout
メイン プロセスに影響を与えることなく、その特定のプロセスからミュートする方法はありますか? で変更しようとしましたsys.stdout
が、すべてのプロセスとメイン プロセスに影響します (プログラムのすべてのインスタンスが同じオブジェクトを指しています)。
>>> import multiprocessing
>>> import sys
>>> def a():
... print('{} - {}'.format(sys.stdout, id(sys.stdout)))
...
>>> for i in range(5):
... multiprocessing.Process(target=a).start()
...
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> - 140230387621232
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> - 140230387621232
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> - 140230387621232
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> - 140230387621232
>>> <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> - 140230387621232
>>> a()
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> - 140230387621232
プロセスによって実行されている関数からすべてのステートメントを削除するprint()
ことはできません。これは、プログラムの別のルーチンがメイン プロセスでその関数を呼び出し、それらの print ステートメントが必要になるためです。
また、印刷を実行する必要があるかどうかを示すためにブール値フラグを使用できることにも気付きましたが、誰かが私にもっと良いアプローチをしてくれることを望んでいました.
どうもありがとうございました!