基于Tornado和redis的web钩子任务队列
项目描述
概述
Torque是基于Tornado和redis的web钩子任务队列。它旨在解决Web应用程序中的两个问题
你想稍后做某事
你想并行执行多项任务
有几种方法可以处理这些问题。例如,在Python中,您可能查看Twisted、Celery和Stackless。
Torque受到Google App Engine的taskqueue的启发,该模型将任务视为webhooks。这种方法允许您通过编写请求处理器来处理任务,就像处理用户发起的请求一样。
要使用它,您需要运行
一个redis数据库
./bin/torque-serve,它公开了一个Tornado应用程序(默认情况下在http://localhost:8889)
每个队列一个./bin/torque-process
或者,如果您只是使用默认队列,可以将./bin/torque-serve和./bin/torque-process替换为
./bin/torque-run
它将在单独的线程中运行Web应用程序和进程循环。
您可以无限期地处理队列,或者直到它们为空。有关详细信息,请参阅torque.process.QueueProcessor.__doc__。
您可以通过两种方式向队列添加任务
通过向由 ./bin/torque-serve 运行的 Tornado 应用程序发送 HTTP 请求来实现。
或者在 torque.client 中使用 Python 客户端 API。
第一种方法允许您使用任何编程语言来使用 Torque。第二种方法如果您使用的是 Python,将会更加简单。
要使用 HTTP 请求添加任务,请向 /add_task 发送带有两个参数的请求
url,即您希望任务请求的 webhook 的 URL
params,即您要发送到请求的 webhook 的参数的 JSON 编码字典
以下是一个 Python 示例(Tornado 应用程序在 localhost 上可用,运行在端口 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))
这将尽快将 POST 请求排队到 http://mywebservice.com/hooks/do/foo,带有参数 foo=somevalue 和 baz=99。
您可以使用任何可以发起 URL 请求的编程语言执行类似操作。但是,如果您使用的是 Python,则可以使用 Torque 提供的客户端 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 次(此时它们会被删除)。
安装
安装 redis 和 Tornado 依赖项。然后安装 Torque
$ 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 控制台脚本的帮助。例如,要运行一个名为 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)
阅读源代码以获取更多信息。
项目详细信息
torque-0.4.5.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8a45d852e04428decf8f991d3da56497ea1435454cf61f1054c8b049649cf261 |
|
MD5 | 1b4e8118f06ae2a6be43278b29320e62 |
|
BLAKE2b-256 | b7edf0d034945991052b2e5858c4133622463089b169c5747dd769fede305018 |