我是Twisted框架的新手,我想让程序等待延迟线程完成。
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"
是否可以等待延迟完整而不是像这样循环?
答案 0 :(得分: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()
相当整洁,不使用任何线程。在这两种情况下,您必须在函数完成后(这是reactor
回调的用途)停止事件循环(reactor.stop()
),否则您的程序将阻止。