2014-01-27 2 views
1

На веб-сервере я в настоящее время, реализующей в web.py, я использую следующий подход, чтобы выполнить действие периодически:Несколько потоков в питон скрипт из командной строки

import threading  

def periodicAction(): 
    # do something 
    threading.Timer(time_interval, periodicAction).start() # when finished, wait and then start same function in a new thread 

periodicAction() # start the method 

Хотя он отлично работает (что он делает то, что он должен делать), у меня все еще есть проблема, что, когда я тестирую его из командной строки, консоль становится невосприимчивой (я все еще могу напечатать, но она не влияет, даже ctrl + c не останавливается программа). Это нормальное поведение, или я делаю что-то неправильно?

ответ

1

Фоновый поток все еще работает, поэтому, если основной поток заканчивается, он будет ждать - навсегда, в этом случае. (Это побочный эффект , так как ожидает, что Ctrl-C не работает.) Если вы этого не хотите, вы можете вызвать setDaemon(True), что делает поток «демона» - это значит, что он будет принудительно закрывается при завершении основной резьбы:

def periodicAction(): 
    print "do something" 
    t = threading.Timer(1.0, periodicAction) 
    t.setDaemon(True) 
    t.start() 
Смежные вопросы