3

コンソールにテキストを印刷できるスレッドがあり、メインプログラムにraw_inputはスレッドを制御するためのスレッドがあります。

私の問題は、私が書いているときにスレッドも次のようなものになることです。

-->whatiwWHATTHETHREADWRITErite

でもこういうものが欲しい

WHATTHETHREADWRITE
-->whatiwrite

ありがとうございました!

4

3 に答える 3

3

ロックを作成し、ロックを保持したまますべての入力と出力を実行できます。

import threading

stdout_lock = threading.Lock()

with stdout_lock:
    r = raw_input()

with stdout_lock:
    print "something"
于 2012-01-14T10:50:53.007 に答える
2

入力をスレッド出力と同期させて、同時に発生しないようにする必要があります。

メインループは次のように変更できます。

lock = threading.lock()

while 1:
    raw_input()     # Waiting for you to press Enter
    with lock:
        r = raw_input('--> ')
        # send your command to the thread

次に、バックグラウンドスレッドの印刷をロックします。

def worker(lock, ...):
    [...]
    with lock:
        print('what the thread write')

Press Enterつまり、スレッドを停止して「入力モード」に入るときです。

具体的には、毎回次のことを行いPress Enterます。

  • ロックが利用可能になるのを待ちます
  • ロックを取得する
  • 印刷-->してコマンドを待ちます
  • コマンドを挿入します
  • そのコマンドをスレッドに送信します
  • ロックを解除します

したがって、スレッドは「入力モード」のときに印刷を試みた場合にのみ停止
し、ターミナルでは次のようになります。

some previous output

---> your input
THE THREAD OUTPUT
于 2012-01-14T11:53:39.287 に答える
-1

cursesのようなものを使用して、バックグラウンドタスクの出力を画面の半分に書き込み、入力/制御を残りの半分に書き込みます。

ほとんどの端末でANSIエスケープコードをいじることもできます。

于 2012-01-14T10:42:39.057 に答える