Использование Twisted Deferreds с параллельными обратными вызовами, когда каждому дается свой аргумент - PullRequest
2 голосов
/ 26 февраля 2011

Я хочу создать deferred следующим образом:

f1(x1) и f2(x2) выполняются параллельно (так сказать), и после их завершения я запускаю f3() Если у меня были те же параметрыЯ бы запустил:

d = Deferred()
d.addCallbacks(f1)
d.addCallbacks(f2)
d.addCallback(lambda x: f3())
d.callback(x1)

Так что я передаю x1 обоим f1 и f2.Но мне нужно f1, чтобы получить x1 и т. Д.

Как я могу это сделать?

Спасибо.

1 Ответ

3 голосов
/ 26 февраля 2011

Я не уверен, правильно ли я понял ваш вариант использования, но, похоже, это что-то, где DeferredList будет работать особенно хорошо.

d1 = function_that_returns_a_deferred_1(x1)
d2 = function_that_returns_a_deferred_2(x2)
d = DeferredList([d1, d2])
d.addCallback(lambda ign: f3())

Таким образом, f3 будет выполняться только после выполнения d1 и d2.

...