前言
Celery是一个异步任务队列。它可以用于需要异步运行的任何内容。RabbitMQ是Celery广泛使用的消息代理。在本这篇文章中,我将使用RabbitMQ来介绍Celery的基本概念,然后为一个小型演示项目设置Celery 。最后,设置一个Celery Web控制台来监视我的任务
基本概念
Broker
Broker(RabbitMQ)负责创建任务队列,根据一些路由规则将任务分派到任务队列,然后将任务从任务队列交付给worker
Consumer (Celery Workers)
Consumer是执行任务的一个或多个Celery workers。可以根据用例启动许多workers
Result Backend
后端用于存储任务的结果。但是,它不是必需的元素,如果不在设置中包含它,就无法访问任务的结果
安装Celery
"_blank" href="https://pypi.org/" rel="external nofollow" >PyPI:
pip install celery
选择一个Broker:RabbitMQ
"htmlcode">
brew install rabbitmq #如果是Ubuntu的话使用apt-get安装
启动RabbitMQ
"htmlcode">
PATH=$PATH:/usr/local/sbin
现在,可以使用rabbitmq-server命令启动我们的RabbitMQ服务器。检查RabbitMQ服务器成功启动,将看到类似的输出:
为Celery配置RabbitMQ
"htmlcode">
# 添加用户跟密码 $ rabbitmqctl add_user test test123 # 添加虚拟主机 $ rabbitmqctl add_vhost test_vhost # 为用户添加标签 $ rabbitmqctl set_user_tags test test_tag # 设置用户权限 $ rabbitmqctl set_permissions -p test_vhost test ".*" ".*" ".*"
敲黑板!RabbitMQ中有三种操作:配置、写入和读取
上面命令末尾的字符串表示用户test将拥有所有配置、写入和读取权限
演示项目
现在让我们创建一个简单的项目来演示Celery的使用
在celery.py中添加以下代码:
from __future__ import absolute_import from celery import Celery app = Celery('test_celery', broker='amqp://test:test123@localhost/test_vhost', backend='rpc://', include=['test_celery.tasks'])
在这里,初始化了一个名为app的Celery实例,将用于创建一个任务。Celery的第一个参数只是项目包的名称,即“test_celery”。
broker参数指定代理URL,对于RabbitMQ,传输是amqp。
后端参数指定后端URL。Celery中的后端用于存储任务结果。因此,如果需要在任务完成时访问任务的结果,应该为Celery设置一个后端。
rpc意味着将结果作为AMQP消息发送回去,这对本次演示来说是一种可接受的格式
include参数指定了在Celery工作程序启动时要导入的模块列表。我们在这里添加了tasks模块,以便找到我们的任务。
在tasks.py这个文件中,定义了我们的任务add_longtime:
from __future__ import absolute_import from test_celery.celery import app import time @app.task def add_longtime(a, b): print 'long time task begins' # sleep 5 seconds time.sleep(5) print 'long time task finished' return a + b
可以看到,导入了在前面的Celery模块中定义的应用程序,并将其用作任务方法的装饰器。另外注意!app.task只是一个装饰器。此外,我们在add_longtime任务中休眠5秒,以模拟一个耗时较长的Task
在设置好Celery之后,我们需要开始运行任务,它包含在runs_tasks.py:
from .tasks import add_longtime import time if __name__ == '__main__': result = add_longtime.delay(1,2) #此时,任务还未完成,它将返回False print 'Task finished"htmlcode">celery -A test_celery worker --loglevel=infoCelery成功连接到RabbitMQ,你会看到这样的东西:
运行任务
再项目文件中输入以下命令运行它:
python -m test_celery.run_tasks查看Celery控制台,看到运行任务:
[2020-05-15 17:15:21,508: INFO/MainProcess]
Received task: test_celery.tasks.add_longtime[25ba9c87-69a7-4383-b983-1cefdb32f8b3]
[2020-05-15 17:15:21,508: WARNING/Worker-3] long time task begins
[2020-05-15 17:15:31,510: WARNING/Worker-3] long time task finished
[2020-05-15 17:15:31,512: INFO/MainProcess]
Task test_celery.tasks.add_longtime[25ba9c87-69a7-4383-b983-1cefdb32f8b3] succeeded in 15.003732774s: 3当Celery收到一个任务,它打印出任务名称与任务id(在括号中):
Received task: test_celery.tasks.add_longtime[7d942984-8ea6-4e4d-8097-225616f797d5]
在这一行下面是我们的任务add_longtime打印的两行,时间延迟为5秒:
long time task begins long time task finished最后一行显示我们的任务在5秒内完成,任务结果为3:
Task test_celery.tasks.add_longtime[7d942984-8ea6-4e4d-8097-225616f797d5] succeeded in 5.025242167s: 3在当前控制台中,您将看到以下输出:
实时监控Celery
Flower是一款基于网络的Celery实时监控软件。使用Flower,可以轻松地监视任务进度和历史记录
使用pip来安装Flower:
pip install flower要启动Flower web控制台,需要运行以下命令:
celery -A test_celery flowerFlower将运行具有默认端口5555的服务器,可以通过http://localhost:5555访问web控制台
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】