TWISTED python - 等待deferToThread完成

时间:2014-02-19 11:48:59

标签: python-2.7 deferred twisted.internet

我是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"

是否可以等待延迟完整而不是像这样循环?

1 个答案:

答案 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()),否则您的程序将阻止。