2010-05-11 79 views
0

我正在評估其使用標準輸入和運行在一堆作業另一個函數傳遞命令的功能。我需要使後者定期休眠,但似乎阻止了stdin。任何意見如何解決這個將不勝感激。睡一個線程被阻塞標準輸入

的功能的源代碼是

def runJobs(comps, jobQueue, numRunning, limit, lock): 
    while len(jobQueue) >= 0: 
     print(len(jobQueue)); 
     if len(jobQueue) > 0: 
      comp, tasks = find_computer(comps, 0); 
      #do something 
     time.sleep(5); 

def manageStdin(): 
    print "Global Stdin Begins Now" 
    for line in fileinput.input(): 
     try: 
      print(eval(line)); 
     except Exception, e: 
      print e; 

--Thanks

回答

1

使用一個單獨的線程:

import time 
import select 
import logging 
import sys 

def stdinWait(interval): 
    start = time.time() 
    while True: 
     time_left = interval - (time.time() - start) 
     if time_left <= 0: 
      break 
     r, w, x = select.select([sys.stdin], [], [], time_left) 
     if r: 
      line = r[0].readline() 
      try: 
       print(eval(line)); 
      except Exception, e: 
       logging.exception(e) 

def runJobs(comps, jobQueue, numRunning, limit, lock): 
    while len(jobQueue) >= 0: 
     print(len(jobQueue)); 
     if len(jobQueue) > 0: 
      comp, tasks = find_computer(comps, 0); 
      #do something 
      stdinWait(5) # wait 5 seconds while watching stdin 
+0

如果輸入到標準輸入時間超過5秒鐘會發生什麼類型? – Opt 2010-05-11 18:41:23

+0

@Sid:'select'調用會超時,它會工作得很好。 – nosklo 2010-05-11 18:59:15

+0

@nosklo:但後來我怎麼會是有史以來能夠進入到東西的標準輸入,如果時間超過5秒類型,因爲它會超時之前,我有機會完成打字輸入。 – Opt 2010-05-11 19:02:35