Python 在未收到用户输入时执行某些操作
在Python中,在用户未给出输入的情况下,我可以用什么方式在循环中执行某些操作。 我有一个python客户端,我要求用户输入,但当用户还没有输入时,我希望每五秒钟更新一次 我不能用Python 在未收到用户输入时执行某些操作,python,loops,input,Python,Loops,Input,在Python中,在用户未给出输入的情况下,我可以用什么方式在循环中执行某些操作。 我有一个python客户端,我要求用户输入,但当用户还没有输入时,我希望每五秒钟更新一次 我不能用 while (raw_input==""): update() 因为如果输入为“”,则表示用户已经输入了某些内容(按enter键) 有办法吗 更新: 我还是找不到适合我的东西。我尝试了下面的方法,也尝试了类似于此线程的方法:。我还尝试将update()方法传递给应该在后台工作的线程。但是任何带有ra
while (raw_input==""):
update()
因为如果输入为“”,则表示用户已经输入了某些内容(按enter键)
有办法吗
更新:
我还是找不到适合我的东西。我尝试了下面的方法,也尝试了类似于此线程的方法:。我还尝试将update()方法传递给应该在后台工作的线程。但是任何带有raw_input()的东西都会使它停留在等待输入上:
import threading
import time
def update():
while True:
time.sleep(5)
print "update"+'\n'
mythread = threading.Thread(target=update, args=())
mythread.daemon = True
mythread.start()
while True:
usrin=raw_input()
print "you typed: "+usrin
每次用户输入内容时,都会进行更新,然后返回usrin。如果这是我想要的,我可以轻松地将update()放入最后一个while循环
如果我只是用update方法启动这个线程,而在程序中不做任何其他事情(废弃最后一个while循环),那么在shell中,当它每五秒钟更新一次时,我仍然可以使用shell(即类型3+5,它给我8)。我希望这样的事情发生在程序中,当用户处于非活动更新状态时,如果他键入了react并返回更新
注意:另外,我目前正在使用python 2.7.8,切换版本是否有帮助?也许这可以帮助您开始:
from threading import Thread
from time import sleep
result = None
def update_every_second():
while result is None:
sleep(1)
print "update"
t = Thread(target=update_every_second)
t.start()
result = raw_input('? ')
print "The user typed", result
也许使用
线程
是一个不错的选择。一般来说,线程之间共享的资源(如数据)应该使用某种机制来防止同时访问。@martineau在这种情况下GIL是不够的吗?首先,防止一次运行多个线程的GIL(全局解释器锁)是C Python实现细节,并非所有Python都有。另外,我的理解是它是在I/0上发布的。即使是从未执行任何I/O的CPU绑定线程也会偶尔释放并重新获取GIL,这给了其他线程运行的机会。@martineau我不确定您的观点是什么。上面示例中唯一的共享资源是名称结果的绑定:它由主线程反弹,由另一个线程读取。一个读取器、一个编写器和一个编写器在任何Python实现上执行原子操作(一次重新绑定)。读取器执行在G中找到的LGB查找。考虑到LGB的L部分在编译时被解析,该查找可能(有效地)在任何实现上也是原子的。如何提高上述代码示例的线程安全性?您需要吗?简单地说,result
处于不确定状态,而raw\u input()
正在从输入中读取一行,等待换行,同时将读取的字符累积到字符串中——因此您不希望另一个线程同时检查其值。顺便说一句,这通常被称为范围规则。