基于异步的plone异步任务队列

collective.taskqueue的Python项目详细描述


collective.taskqueue

https://secure.travis-ci.org/collective/collective.taskqueue.png

collective.taskqueue 通过 为异步排队请求提供一个小框架 ZPublisher。使用这种方法,异步任务 只是对正常注册的浏览器视图(或其他 可遍历的可调用函数),它们使用pas进行身份验证 请求。

此外,还可以配置视图,使其仅对 异步请求。此外, collective.taskqueue 还附带了一个特殊的 PAS插件,将每个请求验证为排队的用户。

最小配置:

zope-conf-additional=
    %import collective.taskqueue
    <taskqueue />
    <taskqueue-server />

最小配置为您提供一个易失性实例本地队列和 消费者,但不保证送货。

具有多个队列的最小配置:

zope-conf-additional=
    %import collective.taskqueue
    <taskqueue />
    <taskqueue-server /><taskqueue>queue mailhost</taskqueue><taskqueue-server>queue mailhost</taskqueue-server>

redis的首选最小配置:

eggs=
    collective.taskqueue [redis]zope-conf-additional=
    %import collective.taskqueue
    <taskqueue>
      type redis
      unix_socket_path ${buildout:directory}/var/redis.sock
    </taskqueue>
    <taskqueue-server>
      name ${:_buildout_section_name_}
    </taskqueue-server>

redis支持为您提供可分发的队列,这些队列可以在 实例。所有实例都应具有队列特定的 <;taskqueue/>; ,但仅限于 使用实例需要 <;taskqueue server/>;

具有多个队列的redis配置示例:

eggs=
    collective.taskqueue [redis]zope-conf-additional=
    %import collective.taskqueue
    <taskqueue>
      type redis
      unix_socket_path ${buildout:directory}/var/redis.sock
    </taskqueue>
    <taskqueue-server>
      name ${:_buildout_section_name_}
    </taskqueue-server>
    <taskqueue>
      type redis
      queue mailhost
      unix_socket_path ${buildout:directory}/var/redis.sock
    </taskqueue>
    <taskqueue-server>
      queue mailhost
      name ${:_buildout_section_name_}
    </taskqueue-server>

建议只使用本地redis安装,因为 连接可能会被防火墙杀死(没有ping或heartbeat可保持 通过企业防火墙建立的连接)。

将任务排队:

fromcollective.taskqueueimporttaskqueuetask_id=taskqueue.add('/Plone/path/to/my/view')

成功的事务处理后,任务将排队(并被消耗)。

要使视图仅对异步请求可见,可以注册视图 对于特殊层collective.taskqueue.interfaces.itaskqueuelayer 仅从由 collective.taskqueue 发送的请求中找到

默认情况下, taskqueue.add 将当前请求的头复制到 异步请求。这应该足以验证 与当前请求的身份验证方式完全相同。

taskqueue.add 返回任务的类似uuid的id,该id可用于 稍后跟踪任务状态。任务id稍后作为x-task-id中的头提供 排队的请求。您可以使用self.request.getheader('x-task-id')在任务视图中获取它。

使用自定义pas插件可以实现更健壮的身份验证。 collective.taskqueue 附带一个可选安装的pas插件,该插件 将每个请求验证为排队的用户。为了达到这个目的, collective.taskqueue将x-task-user-id头附加到队列中 请求,

task queue api的灵感来自于google appengine task queue api。

自省队列

作为plone的最低异步框架, collective.taskqueue 不提供任何用于观察或内省队列的用户界面。 然而,从可信的python中,可以查找 命名队列(默认队列的名称为"default"):

fromzope.componentimportgetUtilityfromcollective.taskqueue.interfacesimportITaskQueuelen(getUtility(ITaskQueue,name='default'))

高级配置

支持的 <;taskqueue/>; -设置为:

< DL>
队列 (默认值=默认值)
唯一的任务队列名称。
键入 (默认值=本地)
任务队列类型("本地"或"redis")或到的完整类路径 自定义类型。
联合国九个插座路径
redis服务器unix套接字路径(使用而不是 主机 端口 )。

其他受支持的redis队列选项包括: 主机 端口 数据库 密码

支持的任务队列服务器设置为:

< DL>
名称 (默认值=默认值)
使用者名称,最好是实例名称。使用者是 redis队列用于保留队列中的消息以实现隔离 交货。
队列 (默认值=默认值)
此使用者(使用服务器)的队列名称。一定有一个 <;taskqueue/>; 与匹配的队列 -值已注册。
并发极限 (默认值=1)
此使用者的最大并发任务限制。建议 将其设置为小于zserver thread-count。把这个留给 默认值( 1 )应以最小值给出最佳结果 冲突错误。
重试最大计数 (默认值=10)

此调度的请求的最大zpublisher重试计数 消费者。

< div > 注

一旦zpublisher超过此限制,则 任务被永久地破坏了。(另一种行为是可能的 通过实现自定义队列类。)

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

推荐PyPI第三方库


热门话题
在java中使用ActionListeners的小程序   为什么这两个文件。存在(…)和文件。不存在(…)?   需要帮助将XML/Java转换为edi(834)文档吗   java GWT 2.5.1和IntelliJ调试模式,可序列化异常   java由用户运行给定的程序   junit Java<>从函数返回的类型   java Hibernate:我需要刷新()吗?   java如何通过GET REST API调用传递ssl证书   java H2 1.4.185无法通过上次使用Hibernate实体运行的服务器生成的UUID进行查询   javajavafx:具有本机行为的自定义窗口   java是否替换当前字符串设置以从xml收集字符串项?   RelativeLayout下的java Android viewpager   java源代码在JD反编译工具反编译后有注释   java Recycler视图不显示Firebase中的图片和类别