Я не уверен, правильно ли я понял ваш вариант использования, но, похоже, это что-то, где 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.