ツイストでdefer関数を使用すると、パラメーターが混乱します。
関数のパラメーターがINT-VALUEであるか、listとdict以外の他の基本的な型であるかどうかを検討しますが、参照ではなく値を渡す必要があります。
from twisted.internet import defer, reactor
def deferFunc(x):
print "11111 %d" % x
d = defer.Deferred()
reactor.callLater(1, d.callback, x)
return d
@defer.inlineCallbacks
def inlineDeferFunc(x):
print "11111 %d" % x
d = defer.Deferred()
reactor.callLater(1, d.callback, x)
result = yield d
defer.returnValue(result)
def loop():
x = [1,2,3,4]
d = defer.succeed(0)
for i in x:
d.addCallback(lambda _ : inlineDeferFunc(i))
if __name__ == '__main__':
loop()
try:
reactor.run()
except:
reactor.stop()
結果は:
11111 1
11111 4
11111 4
11111 4
その結果、私は混乱しました。
1,2,3,4のような正しい出力を取得するにはどうすればよいですか?