Использование `concurrent.futures.Future` в качестве обещания

В документации по Python я вижу:

concurrent.futures.Future...... не должен создаваться напрямую, кроме как для тестирования.

И я хочу использовать это как обещание в своем коде, и я очень удивлен, что не рекомендуется использовать его таким образом.

Мой вариант использования:
У меня есть один поток, который читает пакеты данных, поступающие из сокета, и у меня есть много обратных вызовов, которые вызываются в зависимости от некоторой информации, содержащейся в пакетах. Пакеты являются ответами на запросы потребителей, и все потребители используют одно соединение. Каждый потребитель получает обещание и добавляет к нему несколько обработчиков, которые вызываются при получении ответа.

Так что я не могу использовать Executor подкласс здесь, потому что у меня есть только один поток, но мне нужно создать много Futures (обещаний).

Promise - довольно распространенная техника программирования, и я подумал, что Future реализация обещания Python. Но если не рекомендуется использовать его как обещание, какие питонисты обычно используются для этой цели?

Заметка

Я использую Python 2.7 Backport из concurrent.futures до 2,7

1 ответ

Это прекрасно в использовании Future чтобы обернуть не обещающие API в обещания.

Причина, по которой его обычно не следует создавать, заключается в том, что в большинстве случаев люди создают фьючерсы напрямую, потому что они делают отложенный анти-шаблон и переносят созданное исполнителем будущее в другое будущее.

Стоит отметить, что эта будущая реализация очень слабая, она сродни старому будущему Java, интересные обещания дают вам ощущение, что цепочки просто отсутствуют. Стоит отметить, что такие языки, как JavaScript, получили свои обещания от Twisted Python, который имеет лучшую реализацию, даже если он переплетен с другими вещами.

Другие вопросы по тегам