Pythonのメインアプレットのコードを修正することなく、テストしてうまくいけばデバッグするために作った小さなコードがあります。これは私がこのコードをビルドしてみましょうありますPythonスレッドで複数のstdoutを実行中
#!/usr/bin/env python
import sys, threading, time
def loop1():
count = 0
while True:
sys.stdout.write('\r thread 1: ' + str(count))
sys.stdout.flush()
count = count + 1
time.sleep(.3)
pass
pass
def loop2():
count = 0
print ""
while True:
sys.stdout.write('\r thread 2: ' + str(count))
sys.stdout.flush()
count = count + 2
time.sleep(.3)
pass
if __name__ == '__main__':
try:
th = threading.Thread(target=loop1)
th.start()
th1 = threading.Thread(target=loop2)
th1.start()
pass
except KeyboardInterrupt:
print ""
pass
pass
このコードの私の目標は、同時に(フラッシュ付き)標準出力フォーマットで出力を表示するこれらのスレッドの両方を持つことができると並んで、その後側を持つことである
か何か。問題は、それぞれがフラッシングしているので、デフォルトで他の文字列をフラッシュしていると仮定しています。私はそれが可能であってもこれを働かせる方法をあまり知らない。
スレッドのいずれかを実行するだけで正常に動作します。しかし、私は両方のスレッドを同時に実行して、ターミナル出力で同時に実行できるようにしたい。あなたはより多くの情報が必要な場合は私に知らせて
、端末のスクリーンショット
を:ここで私が得ているものを表示する画像です。前もって感謝します。
印刷はスレッドセーフではありません。 'logging'モジュールを使用するか、ある種のロックを実装するか、別のスレッドに印刷を移動してください。 – Blender
私はstdoutを使用します。なぜなら、(exapleのために)数字を表示し、それをフラッシュして古い場所に新しいものを印刷するのが好きだからです。したがって、単に印刷するためにすべての番号に対して新しい行を作成するのではなく、出力用に固定された場所を作成します。 – BlackVikingPro