以下の 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()
私の理解では、すべてのスレッドが並列に実行され、出力は => すべての proc が混在した stdout です。
スニッパー#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 stdouts だけが無期限に注ぎ込まれます。
私が間違っている場合は修正してください。したがって、基本的に私が理解し確認したいのは、遅延オブジェクトが次々にトリガーされるのに対し、deferToThread は名前スレッドのように並列に実行されることです。