plone的实验性无阻塞期货

collective.futures的Python项目详细描述


集体期货

https://secure.travis-ci.org/datakurre/collective.futures.png

这是提供另一个 在plone上进行异步(非阻塞)处理的方法。

这次我们谈的是承诺和未来: promises是异步运行的函数,它提供 他们的结果是为你的代码添加期货。

其他选择的一个主要区别是 不需要任何附加服务,但只需要 扑通一声在Zope实例上运行。

一个主要的限制是异步执行的 代码无法以任何方式访问数据库(或者 面临意想不到的后果)。而且,这不会带来任何好处 具有haproxy和固定数量的每个实例当前请求。

示例

fromProducts.Five.browserimportBrowserViewfromcollectiveimportfuturesdefmy_async_task(*args):# a lot of time consuming async processingreturnu'my asynchronously computed value'classMyView(BrowserView):def__call__(self,*args):try:returnfutures.result('my_unique_key')exceptfutures.FutureNotSubmittedError:futures.submit('my_unique_key',my_async_task,*args)returnu'just a placeholder value'

fromProducts.Five.browserimportBrowserViewfromcollectiveimportfuturesdefmy_async_task(*args):# a lot of time consuming async processingreturnu'my asynchronously computed value'classMyView(BrowserView):def__call__(self,*args):returnfutures.resultOrSubmit('my_unique_key',u'placeholder value',my_async_task,*args)

解释

这个包使用的方法是 请求分成两个单独的过程:

每当一些附加代码 需要异步计算一个值,它 尝试先请求命名的未来结果,然后才请求 提交一个promise函数来计算将来的结果。

如果提交了任何期货,最初的答复是 已发布,但当前事务被中止 提交的承诺函数在 与默认zope线程分离的并行线程 (甚至在并行过程中)和 它们的返回值被收集 (另请参阅python中concurrent.futures的文档)。

当所有的承诺功能都解决后,最初的请求 被克隆,解析的值被设置为未来值和新的 已发送内部请求。

在第二次传递之后,加载项代码可以使用 现在可用的期货,而不是提交更多的期货,以及 最后,响应会一直发布到 浏览器。


有关更多背景信息:http://datakurre.pandala.org/2014/05/asynchronous-stream-iterators-and.html

更改日志

0.9.3(2018-09-05)

  • 修复plone.protect试图将PromiseWorkerStreamiterator解析为 XML格式 [数据库]

0.9.2(2018-06-29)

  • 添加到记录未来中的异常以获取完整的异常堆栈跟踪 [数据库]

0.9.1(2016-05-25)

  • 修复嵌套请求未传递已解决的未来的问题 [数据库]

0.9.0(2014-10-23)

  • 第一次释放。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在AlertDialog builder标题右侧放置图标   安装weblogic server12时发生java获取错误。1在windows 10上   java无法导入:安卓。支持v7。小装置。Android Studio中的RecyclerView   java Android应用程序等待通知奇怪行为   java如何比较ArrayList中的整数元素?   java Quartz属性不会触发Quartz作业   java轻松地将许多JavaFX属性绑定到UINode   Maven插件管理器导致java错误消息的原因是什么?   JAXB解组错误后java文件被阻止   java如何在spark kafka流中创建消费者组并将消费者分配给消费者组   java Gps lat&long随机显示非常不准确的结果   java使用assest文件夹文件在Android上执行shell命令   java如何在客户端使用javascript提取文本   java扩展描述的distincts之和   java重写默认Spring数据REST配置   java SQL未命名参数语法   二进制搜索任务的java真实解决方案   java在一个多模块多数据源项目中,用什么正确的方式来指示将哪个数据源注入我的DAOs?