如何让我的代码在后台执行操作

时间:2014-05-25 23:09:58

标签: python background raw-input

在我等待输入时,如何确保我的代码正在执行其他操作? 例如......

说我想在输入时数到10 那当然没用,但我有理由学习这个......

    test = 0
    while test < 11:
       test += 1
       print test
       raw_input("taking input")

显然每次输入都会停止输入。 如何在用户提供输入时将其计算在内?

2 个答案:

答案 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机器)。例如,请参阅:

raw_input and timeout

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个循环。在此期间,您可以输入正好显示的字符。