流程: 用户提交任务 --- > Celery   --- > Broker 中间商(可以是数据库,redis)  ---> 最后让celery 中的 worker 执行任务

1 单独使用:
目录结构:


celery_worker.py 文件
#-*- coding:utf-8 -*-
from celery import Celery
import time
app = Celery('tasks', #tasks是app 名字
broker='redis://127.0.0.1:6379/0', #密码方式redis://xxxx@127.0.0.1:6379/0
backend='redis://127.0.0.1:6379/0' #密码方式redis://xxxx@127.0.0.1:6379/0#密码方式redis://xxxx@127.0.0.1:6379/0
) @app.task
def add(x,y): #运行的任务
print("success.......",x,y)
time.sleep(30)
return x + y
celery_client.py 文件
#-*- coding:utf-8 -*-
from celery_work import add
t1 = add.delay(1,2) #提交任务执行 #print(t1.get()) #获取任务执行的结果
#print(t1.get(timeout=1)) #设置当前获取超时时间
#print(t1.ready()) #查看任务是否执行完成,Ture执行完成
1 进入单独使用目录里面启动worker
celery -A celery_work worker -l info -P eventlet #celery_work 为当前py文件名 2 项目使用

目录结构:


  


新建一个 tasks_worker 目录 里面创建
celery.py这是Broker    myTasks_1.py任务1 myTasks_2.py任务2 三个文件
celery.py (文件名必须这样命令)

celery.py文件
#-*- coding:utf-8 -*-
from __future__ import absolute_import, unicode_literals
from celery import Celery #__future__ 表示将相对路径转换为绝对路径 from celery 导入是从python 包里面的绝对路劲导入Celery app = Celery('pro',
broker='redis://127.0.0.1:6379/0',
backend='redis://127.0.0.1:6379/0',
include=(['tasks_worker.myTasks_1','tasks_worker.myTasks_2']) #存任务的文件,tasks_worker当前目录名字是myTasks_1,可以存多个,tasks必须要有这个py文件 tasks_2是一个py文件
) app.conf.update(
result_expires = 3600, #任务结果保存时间 一个小时
) if __name__ == "__main__":
app.start()
myTasks_1.py文件
#-*- coding:utf-8 -*-
# 将相对路径转换为绝对路径
from __future__ import absolute_import, unicode_literals
from .celery import app #获取当前目录中的celery的app @app.task
def add(x,y):
print("success.......",x,y)
return x + y
myTasks_2.py文件
#-*- coding:utf-8 -*-
# 将相对路径转换为绝对路径
from __future__ import absolute_import, unicode_literals
from .celery import app #获取当前目录中的celery的app @app.task
def add(x,y):
print("success.......",x,y)
return (x * y)


项目使用目录下面新建一个 执行任务.py
#-*- coding:utf-8 -*-

from tasks_worker.myTasks_1 import add as add_1
from tasks_worker.myTasks_2 import add as add_2 t1 = add_1.delay(1,2)
print(t1.get()) t2 = add_2.delay(1,2)
print(t2.get())
进入项目使用目录
1 里面必须命名为celery.py
2 myTasks_1.py 为任务1
3 myTasks_2.py 为任务2
启动 celery -A tasks_worker worker -l debug -P eventlet #tasks_worker是项目使用下面的tasks_worker文件夹
 3定时任务(重点)
目录结构:

celery.py文件
#-*- coding:utf-8 -*-
from __future__ import absolute_import, unicode_literals
from celery import Celery #__future__ 表示将相对路径转换为绝对路径 from celery 导入是从python 包里面的绝对路劲导入Celery app = Celery('pro',
broker='redis://127.0.0.1:6379/0',
backend='redis://127.0.0.1:6379/0',
include=(['timing.celery_Tasks']) #存任务的文件,tasks_worker当前目录名字是myTasks_1,可以存多个,tasks必须要有这个py文件 tasks_2是一个py文件
) app.conf.update(
result_expires = 3600, #任务结果保存时间 一个小时
) if __name__ == "__main__":
app.start()
celery_Tasks.py
#-*- coding:utf-8 -*-
from __future__ import absolute_import, unicode_literals #__future__ 表示将相对路径转换为绝对路径 from celery 导入是从python 包里面的绝对路劲导入Celery
from .celery import app
from celery.schedules import crontab

#第一种写法
# @app.on_after_configure.connect
# def tasks_p(sender,**kwargs):
# #sender.add_periodic_task(10.0,test.s("hello"),name="test"), #每秒执行下test函数 要带.s 格式就是整要求的
#
# #sender.add_periodic_task(20.0, test.s("world"), name="test" , expires=10),
#
# sender.add_periodic_task(
# crontab(hour=16, minute=13,),
# test.s(123),
# )
# #修改app配置文件第二种写法
app.conf.beat_schedule = {
'add-every-10s':{
'task': "timing.celery_Tasks.test", #路劲要写全 timing目录下面的 celert_Tasks 里面的 test方法
'schedule': 10.0, #每10秒执行上面的任务
'args':(10,)  #传递这个参数到test里面
}, 'add-every-20s': {
'task': "timing.celery_Tasks.test",
'schedule': 20.0,
'args': (20,)
},
'add-every-cron': {
'task': "timing.celery_Tasks.test",
'schedule': crontab(hour=16, minute=26, day_of_week=1),
'args': ("开始.....................................................",)
} } app.conf.timezone = 'Asia/Shanghai' #设置时区不然会按utc时间执行
@app.task
def test(arg,):
print("run....",arg)
进入定时目录
启动worker : celery -A timing worker -l debug -P eventlet
启动beat : celery -A timing.celery_Tasks beat -l debug

celery 计划任务使用的更多相关文章

  1. celery 分布式异步任务框架(celery简单使用、celery多任务结构、celery定时任务、celery计划任务、celery在Django项目中使用Python脚本调用Django环境)

    一.celery简介: Celery 是一个强大的 分布式任务队列 的 异步处理框架,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行.我们通常使用它来实现异步任务(async tas ...

  2. Celery配置实践笔记

    说点什么: 整理下工作中配置celery的一些实践,写在这里,一方面是备忘,另外一方面是整理成文档给其他同事使用. 演示用的项目,同时也发布在Github上: https://github.com/b ...

  3. django -- Celery实现异步任务

    1. 环境 python==2.7 djang==1.11.2 # 1.8, 1.9, 1.10应该都没问题 celery-with-redis==3.0 # 需要用到redis作为中间人服务(Bro ...

  4. django —— Celery实现异步和定时任务

    1. 环境 python==2.7 djang==1.11.2 # 1.8, 1.9, 1.10应该都没问题 celery-with-redis==3.0 # 需要用到redis作为中间人服务(Bro ...

  5. Django + Celery 实现动态配置定时任务

    哈喽,今天给大家分享一篇Django+Celery实现动态配置定时任务,因为最近也是无意间看到一位大佬关于这块的文章,然后自己觉得不错,也想学习写一下,然后最终实现功能是在前端页面统一管理计划任务,大 ...

  6. 基于 Django 2.0.4 的 djcelery 配置

    Django Celery 配置实践 所需环境 python 3.5.2 rabbitmq 安装所需的包 pip install -r requirements.txt QuickStart 创建Dj ...

  7. Celery学习---Celery 与django结合实现计划任务功能

    项目的目录结构: 项目前提: 安装并启动Redis 安装Django和Celery的定时任务插件 安装方法一: pip直接安装[安装了pip的前提下] omc@omc-virtual-machine: ...

  8. Celery定时任务|计划任务

    适用场景几点几分执行特定的任务 定时任务 配置这个无需多说了和上篇文章一样 任务函数 硬菜来了 添加任务时候的写法 第一种: from celery_task.order_task import or ...

  9. Flask、Celery、RabbitMQ学习计划

    Flask (9.16-9.23) 相关组件了解 (9.16-17) WSGI:Werkzeug 数据库:SQLAlchemy   *重点查看 urls和视图 (9.18-19) session和co ...

随机推荐

  1. unity限帧的正确姿势

    首先 unity上面要做一下手脚 打开后如下 接着.... 在Inspector面板 把V Sync Count 设置为不限制(Don`t Sync)(我们用脚本限制,不然unity自己控制不了它自己 ...

  2. Docker 私有仓库下载镜像

    1.添加私有仓库路径 vim /etc/sysconfig/docker --insecure-registry 192.168.105.30:5000 注:版本差异 2.下载镜像 docker pu ...

  3. SVG 动态添加元素与事件

    SVG文件是由各个元素组成.元素由标签定义,而标签格式即html的元素定义格式.但是载入一个SVG文件,却无法通过常规的js获取对象方式来获取到SVG中定义的元素,更无法通过这种方式来动态添加SVG元 ...

  4. Oracle启动和禁用约束及删除违反约束的记录

    一.禁用约束 alter table table_name disable novalidate constraint constraint_name 二.批量导入数据 三.在开启约束之前一定要检查违 ...

  5. pip安装依赖与生成依赖

    一.安装依赖 从requirements.txt安装依赖库 pip install -r requirements 当提示权限不够时,前面加上sudo#下面就是一个requirements.txt文件 ...

  6. pip 异常问题

    场景:安装的python版本为3.6.4 在使用pip命令时,出现错误:Did not provide a command 如下图所示: 解决办法:pip带上后缀.exe 为什么会出现这种情况? 主要 ...

  7. JPA 将驼峰列名自动转换为_

    数据库中和代码中都没有'cat_age'列名:但是用jpa保存的时候,总是提示此错误:这个问题纠结半天,后来在朋友的指点下,找到问题所在: spring data  jpa 使用默认策略是Improv ...

  8. 苹果审核不通过,程序/游戏不兼容IPV6网络

    最近苹果升级的IOS10,所以那边网络环境变成IPV6,如果你的程序不兼容IPV6,苹果的程序会以这个不兼容的原因驳回审核. 那么如何让自己的程序兼容这个?方法其实C#本来已经提供给你的,而且很简单, ...

  9. JavaScript:利用递归实现对象深拷贝

    先来普及一下深拷贝和浅拷贝的区别浅拷贝:就是简单的复制,用等号即可完成 let a = {a: 1} let b = a 这就完成了一个浅拷贝但是当修改对象b的时候,我们发现对象a的值也被改变了 b. ...

  10. HTTP请求响应头信息

    HTTP请求响应头信息 请求:(request) 组成部分: 请求行 请求头 请求体 请求行:请求信息的第一行 格式:请求方式 访问的资源 协议/版本 例如:GET /day0801/1.html H ...