
我有一个python库,通过多播执行异步网络,可以获得其他服务的回复.它通过返回一个捕获回复的Future来隐藏脏工作.我正在将这个库集成到现有的gevent应用程序中.呼叫模式非常简单:
future = service.broadcast()# next call blocks the current threadreply = future.result(some_timeout)在引擎盖下,concurrent.futures.Future.result()使用threading.Condition.wait().
使用猴子修补的线程模块,这看起来很好而且安全,并且没有使用greenlet阻塞.
有没有理由担心这里或混合gevent和concurrent.futures?
最佳答案好吧,据我所知,期货没有记录在threading.Gedition之上工作,并且没有记录gevent能够安全地修补期货.所以,从理论上讲,有人可以编写一个可以打破gevent的Python实现.但在实践中?很难想象这样的实现会是什么样子.你显然需要某种同步对象来使Future工作.当然,您可以使用Event,Lock和Rlock而不是Condition,但这不会导致gevent出现问题.实现可能会破坏事物的唯一方法是直接转到pthreads / Win32 / Java / .NET /任何同步对象,而不是在线程中使用包装器.
如果它发生的话,你会怎么处理?好吧,期货是用纯Python实现的,它是非常简单的Python,并且有一个功能齐全的backport,可以使用2.5 /3.2.所以,你只需抓住那个backport并换掉concurrent.futures进行期货交易.
所以,如果你正在做一些古怪的事情,比如部署一台将在无人看管的情况下运行5年的服务器,并且可能会在其下面反复升级Python,那么我现在可以安装后端并使用它.
否则,我只是在适当的位置记录假设(以及在它被破坏的情况下的解决方法),然后只使用stdlib模块.
总结以上是内存溢出为你收集整理的python – 使用带有greenlets / gevent的concurrent.futures.Future全部内容,希望文章能够帮你解决python – 使用带有greenlets / gevent的concurrent.futures.Future所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)