Plone的实验性非阻塞future
项目描述
collective.futures
这是一个为Plone提供异步(非阻塞)处理方式的集体包。
这次我们谈论的是承诺和future:承诺是异步运行的函数,它们按需提供作为未来结果的值以供您的代码附加。
与其他替代方案的主要区别是,这不需要任何额外的服务,只需在Zope实例之上运行Plone即可。
一个主要限制是,异步执行的代码不能以任何方式访问数据库(或者您可能会遇到意外的后果)。此外,这也不会带来HAProxy和固定数量的当前请求每实例的好处。
示例
from Products.Five.browser import BrowserView
from collective import futures
def my_async_task(*args):
# a lot of time consuming async processing
return u'my asynchronously computed value'
class MyView(BrowserView):
def __call__(self, *args):
try:
return futures.result('my_unique_key')
except futures.FutureNotSubmittedError:
futures.submit('my_unique_key', my_async_task, *args)
return u'just a placeholder value'
或
from Products.Five.browser import BrowserView
from collective import futures
def my_async_task(*args):
# a lot of time consuming async processing
return u'my asynchronously computed value'
class MyView(BrowserView):
def __call__(self, *args):
return futures.resultOrSubmit(
'my_unique_key', u'placeholder value', my_async_task, *args)
解释
此包使用的方法,将单个请求分割成两个独立的步骤
每当某些附加代码需要异步计算某个值时,它首先尝试请求一个命名的未来结果,然后仅提交一个承诺函数来为该未来计算结果。
如果提交了任何未来,则初始响应永远不会发布,而是当前事务被中止,提交的承诺函数在默认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的问题 [datakurre]
0.9.2 (2018-06-29)
在futures中添加日志异常,以获取完整的异常堆栈跟踪 [datakurre]
0.9.1 (2016-05-25)
修复了已解析的futures未传递给嵌套请求的问题 [datakurre]
0.9.0 (2014-10-23)
第一个版本。
项目详情
关闭
collective.futures-0.9.3.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d81bcf5048692352c31aaa62f2e08d69d6fd7b6592a6efa6a53831fff7ac5eb0 |
|
MD5 | 7c6eab2fd78ec2593e4898c6b1de9b16 |
|
BLAKE2b-256 | 1489f571196e044378a563b95c2126b27dc66b8155d17fadb8aad1383b94d95b |
关闭
collective.futures-0.9.3-py2-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 62af75ba41b6e92cd7e603058fbb02ab15d07de7cf5812882976cf80e9afa22c |
|
MD5 | b78cefa02884bdad0387813d8924f874 |
|
BLAKE2b-256 | 97bc8a9fd18c7e4f4ec3a34f7012e5635f6063dfadf08d0fb7c3c8220daf3f39 |