2014-10-10 76 views
0

在Python中,我可以通過什麼方式在循環中做些什麼,而用戶還沒有給出輸入。 我有python客戶端,我要求用戶輸入,但雖然用戶沒有給出輸入,但我希望每五秒鐘更新一次。在用戶輸入沒有收到的時候做點什麼

我不能使用

while (raw_input==""): 
     update() 

,因爲如果輸入「」,這意味着用戶已經輸入的東西(按回車鍵);

有沒有辦法做到這一點?

更新:

我仍然無法爲我工作得到任何東西。我試過下面的方法,也試過類似於這個線程的東西:waiting for user input in separate thread。我也嘗試將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)。我希望在程序中發生類似的情況,當用戶不活動更新時,以及他是否反應並返回更新。

注意:另外,我目前使用python 2.7.8,切換版本有幫助嗎?

+0

也許使用'thread'是一個不錯的選擇。 – 2014-10-10 20:52:06

+0

https://docs.python.org/2/library/threading.html https://docs.python.org/2/library/multiprocessing.html#module-multiprocessing – 2014-10-10 20:55:15

回答

1

也許這可以讓你開始:

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 
+0

一般來說,資源(如數據)之間共享線程應該使用某種機制來防止同時訪問。 – martineau 2014-10-10 22:48:29

+0

@martineau在這種情況下GIL不夠嗎? – jacg 2014-10-10 22:57:21

+0

首先,GIL(全局解釋器鎖)可以防止一次運行多個線程,它是一個C Python實現細節,並不是所有的Pythons都有。另外,我的理解是它在I/0上發佈。即使CPU執行的線程永遠不會執行任何I/O操作,但每隔一段時間就會執行一次釋放並重新獲取GIL,從而使其他線程有機會運行。 – martineau 2014-10-11 12:46:14

相關問題