我想了解以下 2 个代码片段会发生什么 -
片段#1
from twisted.internet import threads, defer, reactor
def proc1(a):
while True:
print "Proc----------1"
def proc2(a):
while True:
print "Proc----------2"
def proc3(a):
while True:
print "Proc----------3"
d1 = threads.deferToThread(proc1)
d2 = threads.deferToThread(proc2)
d3 = threads.deferToThread(proc3)
reactor.run()
我的理解是所有线程并行运行,输出是 => 所有 procs 混合的标准输出
狙击手#2
from twisted.internet import threads, defer, reactor
def proc1(a):
while True:
print "Proc----------1"
def proc2(a):
while True:
print "Proc----------2"
def proc3(a):
while True:
print "Proc----------3"
d1 = defer.Deferred()
d2 = defer.Deferred()
d3 = defer.Deferred()
d1.addCallback(proc1)
d2.addCallback(proc2)
d3.addCallback(proc3)
d1.callback('a')
d2.callback('a')
d3.callback('a')
reactor.run()
对于这个片段 - 每个延迟回调一个接一个地触发,就输出而言,只有 proc1 标准输出会无限期地倾泻而出。
如果我错了,请纠正我。所以基本上我想理解和确认的是延迟对象一个接一个地被触发,而 deferToThread 是并行运行的,就像线程一样。