线程中的raw_input和print
我有一个线程可以在控制台上打印一些文字,而主程序中有一个 raw_input
用来控制这个线程。
我的问题是,当我在输入的时候,线程也在打印,这样就会出现类似下面的情况:
-->whatiwWHATTHETHREADWRITErite
但我希望能得到像这样的效果:
WHATTHETHREADWRITE
-->whatiwrite
3 个回答
4
你可以创建一个锁,然后在持有这个锁的情况下进行所有的输入和输出操作:
import threading
stdout_lock = threading.Lock()
with stdout_lock:
r = raw_input()
with stdout_lock:
print "something"
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')
简单来说,当你 按下回车
时,你会停止线程并进入“输入模式”。
更具体一点,每次你 按下回车
时,你会:
- 等待锁可用
- 获取锁
- 打印
-->
并等待你的命令 - 输入你的命令
- 将命令发送给线程
- 释放锁
所以你的线程 只有在你处于“输入模式”时尝试打印时才会被停止,
在你的终端上你会看到类似这样的内容:
some previous output
---> your input
THE THREAD OUTPUT