2016-11-01 25 views
1

私はTwistedに基づいてネットワークシステムの実装をしています。私は、メインスレッドではなく、新しいスレッドで関数(ある数学演算を行い、結果を出力する)を実行すると、print関数がSegmentation faultを引き起こすことに気付きました。出来ますか?それを回避するオプションはありますか?Python:複数のスレッドで印刷

+0

おそらく、私はその可能性を推測します。マルチスレッディングでの 'print'のもっとも明白な問題は、' stdout'バッファがスレッドセーフではなく、 'print'を実行する複数のスレッドが、文字化けした出力につながる可能性があることです。ちょうどPythonに限られているわけではありません。 – cdarke

+0

私はCygwinでPy3と同様の問題に気付きました –

答えて

0

スレッドで何かを印刷するには、スレッドロックを使用する必要があります。 例:このように

lock = Lock() 

lock.acquire() # will block if lock is already held 
print("something") 
lock.release() 

(この場合印刷)リソースが複数のスレッドによって同じ時間に使用されません。 スレッドロックの使用は、ロックが取得されたスレッドに注意を向けるようなものです。