在我等待输入时,如何确保我的代码正在执行其他操作? 例如......
说我想在输入时数到10 那当然没用,但我有理由学习这个......
test = 0
while test < 11:
test += 1
print test
raw_input("taking input")
显然每次输入都会停止输入。 如何在用户提供输入时将其计算在内?
答案 0 :(得分:2)
如果您只需要在用户输入输入时可以计算的内容,则可以使用线程:
from threading import Thread,Event
from time import sleep
class Counter(Thread):
def __init__(self):
Thread.__init__(self)
self.count = 0
self._stop = Event()
def run(self):
while not self._stop.is_set():
sleep(1)
self.count+=1
def stop(self):
self._stop.set()
count = Counter()
# here we create a thread that counts from 0 to infinity(ish)
count.start()
# raw_input is blocking, so this will halt the main thread until the user presses enter
raw_input("taking input")
# stop and read the counter
count.stop()
print "User took %d seconds to enter input"%count.count
如果您想在raw_input
秒之后停止n
如果用户没有输入任何输入,那么这稍微复杂一些。最直接的方法是使用select
(尽管如果你使用的是Windows机器)。例如,请参阅:
和
http://repolinux.wordpress.com/2012/10/09/non-blocking-read-from-stdin-in-python/
答案 1 :(得分:0)
您可能想要使用线程。这是一个非常简单的例子:
#!/usr/bin/python
import time,readline,thread,sys
def counterThread():
t = 0
while True:
t += 1
if t % 50000000 == 0:
print "now"
thread.start_new_thread(counterThread, ())
while True:
s = raw_input('> ')
print s
在此示例中,程序计数并且现在打印的每个第50000000个循环。在此期间,您可以输入正好显示的字符。