跳转到主要内容

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

项目描述

概述

Torque是基于Tornadoredis的web钩子任务队列。它旨在解决Web应用程序中的两个问题

  1. 你想稍后做某事

  2. 你想并行执行多项任务

有几种方法可以处理这些问题。例如,在Python中,您可能查看TwistedCeleryStackless

Torque受到Google App Engine的taskqueue的启发,该模型将任务视为webhooks。这种方法允许您通过编写请求处理器来处理任务,就像处理用户发起的请求一样。

要使用它,您需要运行

  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 运行的 Tornado 应用程序发送 HTTP 请求来实现。

  2. 或者在 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=somevaluebaz=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 次(此时它们会被删除)。

安装

安装 redisTornado 依赖项。然后安装 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 (17.8 kB 查看哈希值)

上传时间

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面