Спящая нить блокирует стандартный ввод - PullRequest
0 голосов
/ 11 мая 2010

Я запускаю функцию, которая оценивает команды, переданные с использованием 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;

- Спасибо

1 Ответ

1 голос
/ 11 мая 2010

Использовать одну нить:

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
...