发布网友 发布时间:2022-04-20 01:58
共2个回答
热心网友 时间:2022-04-18 20:32
mac 网页抓取工具:celery,腾讯码农,伪全栈工程师。
以celery为例来说明:
Celery介绍
celery(芹菜)是一个异步任务队列/基于分布式消息传递的作业队列。
它侧重于实时操作,但对调度支持也很好。
celery用于生产系统每天处理数以百万计的任务。
celery是用Python编写的,但该协议可以在任何语言实现。它也可以用其他语言通过webhooks实现。
目前已知有php/ruby/nodejs的实现
安装Celery
#安装celery $ pip install celery #安装时区的模块,不然会有时间慢8小时的问题 $ pip install pytz
创建一个简单“任务”(Task)
在这个教程里,我们将创建一个简单的“任务”(Task) —— 把两个数加起来。通常,我们在 Python 的模块中定义“任务”。
按照惯例,我们将调用模块 file:tasks.py,看起来会像这个样子:
file:tasks.py
from celery.task import task @task def add(x, y): return x + y
此时, @task 装饰器实际上创建了一个继承自 :class:~celery.task.base.Task 的“类”(class)。除非需要修改“任务类”的缺省行为,否则我们推荐只通过装饰器定义“任务”(这是我们推崇的最佳实践)。
seealso: 关于创建任务和任务类的完整文档可以在 ../userguide/tasks 中找到。
配置
Celery 使用一个配置模块来进行配置。这个模块缺省北命名为 :file:celeryconfig.py。
为了能被 import,这个配置模块要么存在于当前目录,要么包含在 Python 路径中。
同时,你可以通过使用环境变量 CELERY_CONFIG_MODULE 来随意修改这个配置文件的名字。
现在来让我们创建配置文件 celeryconfig.py.
配置如何连接 broker(例子中我们使用 RabbitMQ): BROKER_URL = "amqp:''guest:guest@localhost :5672''"
定义用于存储元数据(metadata)和返回值(return values)的后端: CELERY_RESULT_BACKEND = "amqp"
AMQP 后端缺省是非持久化的,你只能取一次结果(一条消息)。
可以阅读 :ref:conf-result-backend 了解可以使用的后端清单和相关参数。
最后,我们列出 worker 需要 import 的模块,包括你的任务。
我们只有一个刚开始添加的任务模块 :file:tasks.py::
CELERY_IMPORTS = ("tasks", )
这就行了。
你还有更多的选项可以使用,例如:你期望使用多少个进程来并行处理(:setting:CELERY_CONCURRENCY 设置),或者使用持久化的结果保存后端。可以阅读 :ref:configuration 查看更多的选项。
note:
你可以也使用 $ celery -A tasks worker --loglevel=info
运行 worker 服务器
为了方便测试,我们将在前台运行 worker 服务器,这样我们就能在终端上看到 celery 上发生的事情:
$ celeryd --loglevel=INFO
在生产环境中,也许你希望将 worker 在后台以守护进程的方式运行。如果你希望这么做,你可以利用平台或者类似于 supervisord_ (查阅 :ref:daemonizing 以获得更多信息) 的工具来实现。
可以通过下列命令行获得完整的命令参数清单:
$ celeryd --help
supervisord: [[http://supervisord.org]]
执行任务(task)
我们通过调用 class 类的 ~celery.task.base.Task.delay 方法执行任务。
~celery.task.base.Task.apply_async 方法一个非常方便的方法,通过这个方法我们可以充分控制控制任务执行的参数(参见 :ref:guide-executing)。
>>> from tasks import add >>> add.delay(4, 4) <AsyncResult: 8143a6-39a2-4e52-837b-d80d33efb22d>
此时,任务已经被发送到了消息 broker。直到有 worker 服务器取走并执行了这个任务,否则 Broker 将一直保存这个消息。
现在就可以使用任务返回类 ~celery.result.AsyncResult 来查看 worker 的日志,看看到底发生了什么。如果配置了一个结果存储类 ~celery.result.AsyncResult 来保存任务状态,任务执行完毕可获得返回值;任务执行失败则可获得异常/回调等信息。
热心网友 时间:2022-04-18 21:50
维棠1.95,这个可以抓