基于tornado和redis的web钩子任务队列

torque的Python项目详细描述


概述

torque是一个基于Tornadoredis的web钩子任务队列。它被设计成 在Web应用程序的上下文中解决两个问题:

  1. 你以后想做点什么
  2. 你想同时做很多事情

解决这些问题有很多方法。例如,在python中,您 可以看看TwistedCeleryStackless

torque的灵感来自google app engine的taskqueue,它的models任务是 webhooks。这种方法允许您在正常的web中处理任务 通过编写请求处理程序实现的应用程序环境,就像处理 用户发起的请求。

要使用它,您需要运行:

  1. 一个redis数据库
  2. ./bin/torque-serve,它公开Tornado应用程序(默认情况下 http://localhost:8889
  3. 每个队列一个./bin/torque-process

或者,如果您只是使用默认队列,则可以将./bin/torque-serve./bin/torque-process替换为:

  1. ./bin/torque-run

它在单独的线程中运行web应用程序和进程循环。

您可以无限期地处理队列,或者直到队列为空。见 torque.process.QueueProcessor.__doc__了解详细信息。

您可以通过两种方式将任务添加到队列:

  1. 通过向由./bin/torque-serve
  2. 运行的Tornado应用程序发送http请求
  3. 或者在torque.client
  4. 中使用python客户机api

第一种方法允许您使用来自任何编程语言的torque。第二次 如果您使用python,它会简单得多。

若要使用http请求添加任务,请使用两个参数投递到/add_task

  • url这是您希望任务请求的webhook的url
  • params这是您想要的参数的json编码字典 发送到您请求的webhook

python中的一个示例(在localhost上提供了tornado应用程序, 在端口8889上运行将是:

import json
import urllib

mytask = {
    'url': 'http://mywebservice.com/hooks/do/foo',
    'params': json.dumps({'foo', 'somevalue', 'baz': 99})
}
target_url = 'http://localhost:8889/add_task'
urllib.urlopen(target_url, urllib.urlencode(mytask))

这将对http://mywebservice.com/hooks/do/foo的post请求排队 尽快生成参数foo=somevaluebaz=99

您可以使用任何可以生成url的编程语言执行类似的操作 请求。但是,如果您使用的是python,那么使用客户机要简单得多 扭矩提供的API:

from torque.client import add_task
t = add_task(url='http://mywebservice.com/hooks/do/foo', params={'a': 1})

注意,这不需要json对参数进行编码。对于所有客户端api 选项,请参见torque.client.Task.__doc__

如果错误,个别任务退避,达到最大退避延迟。 这可以配置为--max_task_delay,直到它们出错为止--max_task_errors 时间(此时它们被删除)。

安装

安装redisTornado依赖项。然后安装扭矩:

$ easy_install torque

或手动从源代码:

$ git clone git://github.com/thruflo/torque.git
$ cd torque
$ python setup.py install

运行

运行redis

$ ./redis-server

启动Tornado应用程序:

$ ./bin/torque-serve

如果要运行测试,请使用:

$ ./bin/nosetests -w ./src/torque --with-doctest
.......
----------------------------------------------------------------------
Ran 7 tests in 22.627s

OK

启动默认任务队列,无限期运行:

$ ./bin/torque-process

有关配置列表,请参见针对任一torque控制台脚本的--help。 选项。例如,要运行名为foobar的第二个队列,可以使用:

./bin/torque-process --queue_name=foobar

或者要处理默认队列一次,直到为空,您可以使用:

./bin/torque-process --finish_on_empty=true --max_task_errors=3

或者从python代码中执行完全相同的操作:

from torque.processor import QueueProcessor
QueueProcessor(max_task_errors=3).process(finish_on_empty=true)

阅读源代码了解更多信息。

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

推荐PyPI第三方库


热门话题
Java:如何使用另一个类中的对象   如何在Java中迭代旁遮普语(阿拉伯语)?   类Java嵌套ArrayList返回对象   java正则表达式以匹配“:”之后包含的字符串   java为什么main()很好地显示“Lukaku”并包含_names()返回null?   java嵌套循环,无法理解如何编写此代码   java使用maven动物嗅探器插件检查自己的API   java上传的文件创建保存以备将来在GWT服务器端使用   java转换为Dalvik格式失败65536限制   Java后端的javascript最佳RIA工具   amazon web服务如何将tar文件从amazonS3 bucket提取到Java中的另一个s3   java如何在hibernate搜索中实现对int值的搜索?   使用Maven初始化引导层JavaFX时发生java错误   java Google登录API例外:10:   java Glassfish 3.1.2加载本机库(.dll)   java在join操作中使用TumblingWindow,但没有将任何元素传输到my JoinFunction   IBatis+Java:检索HashMap   多线程java与scala在单独线程上读取文件