2014-02-19 3 views
0

Я новичок в Twisted framework, и я хотел бы заставить программу ждать завершения отложенного потока.TWISTED python - Подождите, пока deferToThread завершится

import time 
from twisted.internet import defer, threads 

a=None 
def proc(n): 
    time.sleep(n) 
    print "Hi!!" 
    a=1 
    return 

d = threads.deferToThread(proc,5) 
while not a: 
    pass 
print a 
print "Done" 

Можно ли дождаться завершения отложенного до аккуратного, а не циклического цикла?

ответ

1

Чтобы сделать то, что вы хотите, откладывая в теме:

import time 
from twisted.internet import threads, reactor 

def proc(n): 
    time.sleep(n) 
    print "Hi!!" 

d = threads.deferToThread(proc, 5) 
d.addCallback(lambda _: reactor.stop()) 
reactor.run() 

Чтобы сделать то, что вы хотите асинхронно, который, как Twisted разработан, вы можете сделать:

from twisted.internet import task, reactor 

def say_hi(): 
    print 'Hi' 

d = task.deferLater(reactor, 5, say_hi) 
d.addCallback(lambda _: reactor.stop()) 
reactor.run() 

что значительно neater и не использует нити. В обоих случаях вы должны позаботиться о том, чтобы остановить цикл событий (reactor) после завершения вашей функции (это то, что нужно для обратного вызова reactor.stop()), иначе ваша программа будет просто заблокирована.

Смежные вопросы