Python之celery使用

RabbitMQ 是一个由 erlang 开发的基于 AMQP(Advanced Message Queue)协议的开源实现,是当前最流行的消息中间件之一.

1、安装

1.1、添加签名私钥
wget -O - 'https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc' | sudo apt-key add -
1.2、添加源
# ubuntu16.04LTS
echo "deb https://dl.bintray.com/rabbitmq/debian xenial main erlang" | sudo tee /etc/apt/sources.list.d/bintray.rabbitmq.list
# ubuntu18.04LTS
echo "deb https://dl.bintray.com/rabbitmq/debian bionic main erlang" | sudo tee /etc/apt/sources.list.d/bintray.rabbitmq.list
1.3、安装Erlang和RabbitMQ
sudo apt update
sudo apt install erlang-nox
sudo apt install rabbitmq-server

2、使用

2.1、激活Management WEB
sudo rabbitmq-plugins enable rabbitmq_management
2.2、创建用户
sudo rabbitmqctl add_user {username} {password}
2.4、创建虚拟host
sudo rabbitmqctl add_vhost test
2.3、设置管理员
sudo rabbitmqctl set_user_tags {username} administrator 
2.4、设置权限
# 向虚拟host:test设置权限
sudo rabbitmqctl set_permissions -p test {username} ".*" ".*" ".*"
2.5、访问WEB

使用上面创建的用户访问http://localhost:15672即可.

3、Celery使用RabbitMQ

RabbitMQ是celery官方推荐的Broker.
Celery一些基本配置如下:

BROKER_URL = 'amqp://{username}:{password}@localhost:5672/{vhost}'
CELERY_RESULT_BACKEND =  'redis://:password@host:port/db_number'
CELERYD_CONCURRENCY = 20  # 并发worker数
CELERYD_FORCE_EXECV = True  # 非常重要,有些情况下可以防止死锁
CELERYD_MAX_TASKS_PER_CHILD = 100
CELERY_TIMEZONE = 'UTC'
CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 12  # 任务过期时间
CELERY_TASK_PROTOCOL = 1

队列及路由:

CELERY_DEFAULT_QUEUE = 'default'
CELERY_QUEUES = (
    Queue(name='default', exchange=Exchange('default'), routing_key='default'),
    Queue(name='task_A', exchange=Exchange('task_A_queue', ), routing_key='task_A_key')
    )
CELERY_ROUTES = {
    'parser.task_A': {'queue': 'task_A_queue', 'routing_key': 'task_A_key'}
}

定时任务:

# import
CELERY_IMPORTS = (
    'parser.task_A',
    'parser.task_B'
)
# schedules
CELERYBEAT_SCHEDULE = {
    'taskA-every-hour': {
        'task': 'parser.task_A',
        'schedule': crontab(minute=0, hour='*/1'),
        'options': {'queue': 'task_A_queue', 'routing_key': 'task_A_key'}
    },
    'loves-every-day': {
        'task': 'parser.task_B',
        'schedule': crontab(minute=0, hour='*/1'),
        'options': {'queue': 'default', 'routing_key': 'default'}
    }
}

celery启动:

# 启动worker,指定app名称
celery -A parser worker -l info
# 启动worker,且指定处理相应队列的任务
celery -A parser worker -l info -Q task_A_queue
# 启动定时任务的producer
celery -A parser beat -l info
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值