使用`concurrent.futures.Future`作为承诺

时间:2014-11-10 08:02:26

标签: python concurrency promise future concurrent.futures

在Python docs中,我看到了:

  

concurrent.futures.Future ......不应该直接创建   除了测试。

我想在我的代码中使用它作为一个承诺,我很惊讶不建议像这样使用它。

我的用例:
我有一个线程读取来自套接字的数据包,我有许多回调,根据数据包中包含的一些信息调用。数据包是对消费者请求的响应,所有消费者都使用单一连接。每个使用者都会收到一个promise,并为其添加一些处理程序,这些处理程序在响应到达时会被调用。

所以我不能在这里使用Executor子类,因为我只有一个线程,但我需要创建许多Futures(promises)。

Promise是非常普遍的编程技术,我认为Future是Python的承诺实现。但是如果不建议像承诺那样使用它,那么pythonistas通常用于此目的吗?

注意

我使用Python 2.7 backport of concurrent.futures to 2.7

1 个答案:

答案 0 :(得分:8)

完全罚款使用Future将非承诺API包装到承诺中。

一般 将来

值得一提的是,未来的实施非常弱,它类似于Java的旧时代,很酷的东西承诺会让你像链接一样简单失踪。值得一提的是来自Python的Twisted中的JavaScript doing the deferred anti pattern等语言,它具有更好的实现,即使它与其他东西交织在一起。