0
私は数十個の「Pythonサブプロセスがハングする」記事を読んできましたが、以下のコードのさまざまな記事に記載されている問題をすべて解決したと思います。出力をパイプするときにPythonのサブプロセスがPopenとしてハングする
Popenコマンドでコードが断続的にハングします。私はmultiprocessing.dummy.apply_asyncを使用して4つのスレッドを実行しています。これらのスレッドはそれぞれサブプロセスを開始し、出力行を1行ずつ読み込み、変更されたバージョンをstdoutに出力します。
def my_subproc():
exec_command = ['stdbuf', '-i0', '-o0', '-e0',
sys.executable, '-u',
os.path.dirname(os.path.realpath(__file__)) + '/myscript.py']
proc = subprocess.Popen(exec_command, env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=1)
print "DEBUG1", device
for line in iter(proc.stdout.readline, b''):
with print_lock:
for l in textwrap.wrap(line.rstrip(), LINE_WRAP_DEFAULT):
上記apply_asyncから実行されるコード:
pool = multiprocessing.dummy.Pool(4)
for i in range(0,4):
pool.apply_async(my_subproc)
が断続的にサブプロセスが
subprocess.Popen
でハングアップしますが、声明 "DEBUG1は、" 印刷されません。場合によってはすべてのスレッドが動作することがありますが、時には4つのうち1つしか動作しません。
これは、Popenの既知のデッドロック状況を示すものではないことがわかりました。私が間違っている?