django_celery_beat报错winerror5拒绝访问、winerror6句柄无效、rlocks were not greened等等

报错截图

这些是我的搜索记录,错误太多了所以没截图,遇到一个搜一个
报错搜索记录

解决方法

最重要最关键的在第6点!!!
有的问题也不知道是做到哪一步了才成功解决了的,这里把关键部分的代码和截图奉上:
1.settings.py

# celery的配置
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_TASK_TRACK_STARTED = True
# 任务执行超时时间(30分钟)
CELERY_TASK_TIME_LIMIT = 30 * 60
# 配置任务消息中间件
CELERY_BROKER_URL = 'redis://localhost:6379/1'
# 指定 Backend
CELERY_RESULT_BACKEND = 'redis://localhost:6379/2'
CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = True
CELERY_FORCE_EXECV = True
# celery 序列化与反序列化配置
CELERY_TASK_SERIALIZER = 'pickle'
CELERY_RESULT_SERIALIZER = 'pickle'
CELERY_ACCEPT_CONTENT = ['pickle', 'json']
CELERY_IGNORE_RESULT = True
# 指定调度器模型类
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'

# settings.py
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'celery': {
            'handlers': ['console'],
            'level': 'INFO',
        },
    },
}

2.celery.py

import os
from celery import Celery


# 设置DJANGO_SETTINGS_MODULE环境变量,指定Django项目的设置模块
os.environ['DJANGO_SETTINGS_MODULE'] = '项目名.settings'
# 解决Celery启动时出现的错误
os.environ.setdefault('FORKED_BY_MULTIPROCESSING','1')
# 创建一个Celery实例,命名为---,我这里用的是项目名
celery_app = Celery('项目名')

# 从Django的设置模块中加载Celery的配置,所有以'CELERY_'开头的设置将被加载
celery_app.config_from_object('django.conf:settings', namespace='CELERY')

# 自动加载Django应用下tasks.py中注册的celery任务函数
celery_app.autodiscover_tasks()
@celery_app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

3._init_.py 即模块目录下的init.py(在django里面应该叫app?)

from __future__ import absolute_import, unicode_literals
from 项目名.celery import celery_app as app

__all__ = ('app',)

4.tasks.py

from 项目名.celery import celery_app
import time


# 定义几个简单的任务
@celery_app.task
def add(x, y):
    print(f"任务开始: 计算 {x} + {y}")
    time.sleep(5)  # 模拟耗时操作
    result = x + y
    print(f"任务结束: 结果为 {result}")
    return result


@celery_app.task
def multiply(x, y):
    print(f"任务开始: 计算 {x} * {y}")
    time.sleep(3)  # 模拟耗时操作
    result = x * y
    print(f"任务结束: 结果为 {result}")
    return result

@celery_app.task
def print_hello():
    print("Hello, World!")
    return 'hello world'

4.如果Database returned an invalid datetime value. Are time zone definitions for your database installed?
点击链接
两个压缩包
这两个随便下一个,解压,执行里面的sql语句即可
5.不知道add任务怎么传参
传参示例
创建任务时,展开arguments传参即可。比如我这里填了[3,4],该任务计算结果为7(嗯,这是废话)
6.启动worker报的乱七八糟的错,也就是标题那些
首先启动项目
然后

celery -A 模块名 beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler

最后

如果没有gevent的话
pip install gevent

启动worker

Celery -A 模块名 worker -l info -P gevent 

这里最重要的是这个-P gevent,我之前用-P eventlet或者不用,都没法正常执行任务,beat把任务send了,worker卡好久才receive,然后报一堆莫名其妙的错。

成果截图

真的每分钟都在打印hello world啊o(╥﹏╥)o
喜上眉梢喜出望外喜气洋洋

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值