私はひどく捻挫してしまいました。私は本当に一つのことが必要です - 同じ長さから始まる任意の数の関数を実行し、すべての結果を集めて何らかの処理を行います。ここでPython Twisted - 複数のコールバックを実行
は私が持っているものです。
from twisted.internet import defer
import time
# slow computing query
def process_data(num, data):
time.sleep(5)
array = []
# mock the results obtained from processed data
for i in range(0, 5):
array.append(num)
return array
def process_results(arrays):
# this should collect return arrays of all callbacks
print arrays
data = []
callbacks_refs = []
for i in range(0, 5):
d=defer.Deferred()
d.addCallback(process_data)
callbacks_refs.append(d)
callbacks = defer.DeferredList(callbacks_refs)
callbacks.addCallback(process_results)
for i, d in enumerate(callbacks_refs):
d.callback(i, data)
私はループの最後には、(通常の約束と同じように)非同期ですべてのコールバックの実行を開始し、すべての結果がその機能をprocess_resultsに渡されることを期待していましたcallbacks_refsからのすべてのコールバックが完了した後に実行されますが、私はそれにひどく間違っていると感じます。