Python使用任务队列-celery

1.普通任务、延迟任务:tasks.py、main.py

        task.py

import time
from celery import Celery

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

@app.task(time_limit=60)  # 设置超时时间
def mytask(params):
    start = time.time()
    print('task start...')
    time.sleep(params['num'])
    print("task use:%s seconds " % (time.time() - start))


# 启动 Worker,监听 Broker 中是否有任务
# celery -A tasks worker --loglevel=info

main.py

from tasks import mytask
import time 
from datetime import datetime, timedelta


def eta_second(second):
    ctime = datetime.now()
    utc_ctime = datetime.utcfromtimestamp(ctime.timestamp())
    time_delay = timedelta(seconds=second)  
    return utc_ctime + time_delay


def func(num):
    start = time.time()
    # 立即执行
    t = mytask.delay({"num": num})
    print("任务:%s 耗时:%s 秒 " % (t.task_id, time.time()-start))


def delay_func(num):
    start = time.time()
    # 延迟5s执行
    t = mytask.apply_async(args=({"num": num},), eta=eta_second(5))
    print("任务:%s 耗时:%s 秒 " % (t.task_id, time.time()-start))


if __name__ == '__main__':
    for i in range(3):
        func(i)        
        delay_func(i)  


# 启动传递任务
# python main.py

2. 周期任务:tasks.py、celeryconfig.py启动

tasks.py

from celery import Celery
import celeryconfig

app = Celery('tasks', broker='redis://localhost:6379/0')
app.config_from_object('celeryconfig')

@app.task
def add(x, y):
    print(f'result: {x+y}')
    return x + y

celeryconfig.py

from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
    "every-1-minute": {
        'task': 'tasks.add',
        'schedule': crontab(minute='*/1'),  # 表示一分钟执行一次
        'args': (5, 6)                      # 传入的参数
    }
}   

启动:

celery -A tasks worker -B --loglevel=info    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值