今天使用爬虫有些耗时较长,需要使用任务调度,Celery是Python开发的分布式任务调度模块,Celery本身不含消息服务,它使用第三方消息服务来传递任务,目前,Celery支持的消息服务有RabbitMQ、Redis甚至是数据库,当然Redis应该是最佳选择。

安装Celery

用pip管理工具安装Celery:

$ sudo pip install Celery

使用Redis作为Broker时,需要再安装一个celery-with-redis。

pip install celery-with-redis

开始编写tasks.py:

# -*- coding:utf8 -*-

import time

from celery import Celery

celery = Celery('tasks', broker='redis://localhost:6379/0')

# 如果有redis密码

# celery = Celery('tasks', broker='redis://:foobared@localhost:6379/0')

@celery.task

def sendmail(email):

print('sending mail to %s...' % email)

time.sleep(2.0)

print('mail sent.')

然后启动Celery处理任务:

$ celery -A tasks worker --loglevel=info

发布队列

>>> from tasks import sendmail

>>> sendmail.delay('test@ptorch.com')

可以看到,Celery的API设计真的非常简单。

然后,在Worker里就可以看到任务处理的消息:

[2013-08-27 19:20:23,363: WARNING/MainProcess] celery@MichaeliMac.local ready.

[2013-08-27 19:20:23,367: INFO/MainProcess] consumer: Connected to redis://localhost:6379/0.

[2013-08-27 19:20:45,618: INFO/MainProcess] Got task from broker: tasks.sendmail[1a0a9262-7858-4192-9981-b7bf0ea7483b]

[2013-08-27 19:20:45,655: WARNING/PoolWorker-4] sending mail to celery@python.org...

[2013-08-27 19:20:47,657: WARNING/PoolWorker-4] mail sent.

[2013-08-27 19:20:47,658: INFO/MainProcess] Task tasks.sendmail[1a0a9262-7858-4192-9981-b7bf0ea7483b] succeeded in 2.00266814232s: None

Celery默认设置就能满足基本要求。Worker以Pool模式启动,默认大小为CPU核心数量,缺省序列化机制是pickle,但可以指定为json。由于Python调用UNIX/Linux程序实在太容易,所以,用Celery作为异步任务框架非常合适。

常见问题

Celery不能跨文件调用,会出现The message has been ignored and discarded.,这个可以使用如下方法使用

celery -A file.tasks worker --loglevel=info

原创文章,转载请注明 :Python使用Celery分布式异步队列/任务调度(基于Redis) - pytorch中文网

原文出处: https://ptorch.com/news/162.html

问题交流群 :168117787

python分布式任务调度_Python使用Celery分布式异步队列/任务调度(基于Redis) - pytorch中文网...相关推荐

  1. mac python3打包成窗体程序_使用pyinstaller将python程序打包成exe/苹果软件的方法与异常解决 - pytorch中文网...

    一.安装pyinstaller 通过清华镜像安装比较快 # 二者选其一执行,第二条快 pip3 installer pyinstaller # 清华镜像安装 # pip3 install -i htt ...

  2. 项目分布式部署那些事(1):ONS消息队列、基于Redis的Session共享,开源共享

    因业务发展需要现在的系统不足以支撑现在的用户量,于是我们在一周之前着手项目的性能优化与分布式部署的相关动作. 概况 现在的系统是基于RabbitHub(一套开源的开发时框架)和Rabbit.WeiXi ...

  3. python创建矩阵_Python创建对称矩阵的方法示例【基于numpy模块】

    本文实例讲述了Python创建对称矩阵的方法.分享给大家供大家参考,具体如下: 对称(实对称)矩阵也即: step 1:创建一个方阵 >>> import numpy as np & ...

  4. 秒杀抢购异步下单:基于Redis的消息队列秒杀抢购异步下单功能

    学习Redis时,练习的实战项目代码--基于Redis的Stream类型的秒杀抢购异步下单. 说明: Redis的stream类型的消息队列实现异步下单功能.Redis版本至少要5.0及以上版本才可以 ...

  5. loglevel python 不输出_Python 通过 Celery 框架实现分布式任务队列!

    Celery 是一个简单.灵活且可靠的分布式消息处理系统,主要用来作为任务队列对海量消息数据进行实时的处理,在多个程序线程或者主机之间传递和分发工作任务.同时也支持计划任务等需求. 一.环境配置 Ce ...

  6. python金融实战_Python金融实战(异步图书)

    领取成功 您已领取成功! 您可以进入Android/iOS/Kindle平台的多看阅读客户端,刷新个人中心的已购列表,即可下载图书,享受精品阅读时光啦! - | 回复不要太快哦~ 回复内容不能为空哦 ...

  7. 浙大python读者验证码_Python实现简单生成验证码功能【基于random模块】

    本文实例讲述了Python实现简单生成验证码功能.分享给大家供大家参考,具体如下: 验证码一般用来验证登陆.交易等行为,减少对端为机器操作的概率,python中可以使用random模块,char()内 ...

  8. 用python计算准确率_Python中计算模型精度的几种方法,Pytorch,中求,准确率

    方法一:直接在epoch过程中求取准确率 简介:此段代码是LeNet5中截取的. def train_model(model,train_loader): optimizer = torch.opti ...

  9. Python一些可能用的到的函数系列81 基于Redis Stream的简单消息队列对象

    说明 一个实现消息队列简单管理的对象 内容 代码 import redis # 基于Redis Stream的消息队列 class LittleRQ:def __init__(self, host, ...

最新文章

  1. TCP/IP协议三次握手与四次握手流程解析
  2. 新的小游戏发布啦。Pop Jungle
  3. RotateWorldTest对层动作
  4. MySql入门使用:登录及简单创建查询表
  5. mysql etc my.cnf_mysql配置文件 /etc/my.cnf 详细解释
  6. 由于CRS磁盘dismount造成的CRS进程无法启动问题
  7. java组件是什么意思_年前面试京东3面凉经~ 面试过程与真题全分享+备战春招(java)...
  8. Spring boot + maven
  9. CAN 总线嵌入式驱动编程
  10. 「05」回归的诱惑:一文读懂线性回归
  11. 为什么双重检查锁模式需要 volatile ?
  12. navicat12简体中文专业版免费使用教程
  13. 【EXLIBRIS】随笔记 004
  14. C语言结业作业,2019年本科课程-C语言程序设计结业试卷(附答案).doc
  15. 微信小程序开发(十五)小程序使用scrollview实现滚动导航栏
  16. java 对战平台-魔兽版
  17. js:使用nodejs为页面传递mysql中的数据
  18. 什么叫金叉和死叉?什么叫macd二次死叉?
  19. PV、UV、VV、IP的区别
  20. Linux多线程概念及实现

热门文章

  1. controller如何保证当前只有一个线程执行_今天我们来聊一聊 Spring 中的线程安全性...
  2. windos 2008 vista 下的端口范围改变
  3. HttpURLConnection IllegalStateException
  4. java B2B2C 源码 多级分销Springcloud多租户电子商城系统- 整合企业架构的技术点(二)...
  5. Swift - 委托(delegate)的介绍,及使用样例
  6. 【SICP练习】104 练习3.1-3.4
  7. 安卓重要组件#1--ListView创建及基本的使用方法
  8. 顶点(vertexs) 图元(primitives) 片元(fragments片断) 像素(pixels)
  9. Smart Card知识
  10. Spring testcontext