【问题标题】:How do I periodically run code in django?如何在 django 中定期运行代码?
【发布时间】:2021-05-22 18:27:09
【问题描述】:

我想定期在 django 中运行代码为此我下载了 Celery 并尝试对其进行配置

添加到 settings.py

INSTALLED_APPS = [
    'django_celery_results',  
    'django_celery_beat',  
}

CELERY_TIMEZONE = "Australia/Tasmania"
CELERY_TASK_TRACK_STARTED = True
CELERY_TASK_TIME_LIMIT = 30 * 60

CELERY_RESULT_BACKEND = 'django-db'
CELERY_RESULT_BACKEND = 'django-cache'
CELERY_CACHE_BACKEND = 'default'
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'my_cache_table',
    }
}

创建了一个 celery.py 文件

import os
from celery import Celery

name='shop'
os.environ.setdefault('DJANGO_SETTINGS_MODULE', name+'.settings')
app = Celery(name)
app.config_from_object('django.conf:settings', namespace='CELERY')

app.conf.beat_schedule = {
    'every-15-seconds':{
        'task':'offers.tasks.send_email',
        'schedule':15,
        'args':('dsssew.com',)
    }
}
app.conf.timezone = 'UTC'
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
    print(f'Request: {self.request!r}')

创建了一个tasks.py文件

from __future__ import absolute_import, unicode_literals
from celery import shared_task

@shared_task
def send_email(email):
    print(email)


@shared_task
def add(x, y):
    return x + y


@shared_task
def mul(x, y):
    return x * y


@shared_task
def xsum(numbers):
    return sum(numbers)

依次启动一切

python manage.py runserver
celery -A shop worker -l INFO
celery -A shop beat -l INFO

beat 带给我

celery beat v5.0.5 (singularity) 正在启动。 __ - ... __ - _ LocalTime -> 2021-02-18 20:31:57 配置 -> .经纪人 -> amqp://guest:**@localhost:5672// .加载器-> celery.loaders.app.AppLoader .调度程序-> celery.beat.PersistentScheduler . db -> celerybeat-schedule .日志文件 -> [stderr]@%INFO . maxinterval -> 5.00 分钟(300 秒)[2021-02-18 20:31:57,062:INFO/MainProcess] 节拍:开始... [2021-02-18 20:31:57,216: INFO/MainProcess] 调度程序:每 15 秒发送一次到期任务 (offers.tasks.send_email)

但工人每 15 秒倾倒下一个

[2021-02-19 16:18:02,275:警告/SpawnPoolWorker-1] c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\celery\app\trace.py:617: RuntimeWarning:在体外引发异常:TypeError('ord() 预期长度为 1 的字符串,但找到了 int'):回溯(最近 最后调用):文件 "c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\celery\app\trace.py", 第 400 行,在 trace_task 中 request=task_request,文件“c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\celery\backends\base.py”, 第 435 行,在 store_result 中 request=request, **kwargs) 文件 "c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\celery\backends\base.py", 第 851 行,在 _store_result 中 current_meta = self._get_task_meta_for(task_id) 文件“c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\celery\backends\base.py”, 第 869 行,在 _get_task_meta_for meta = self.get(self.get_key_for_task(task_id)) 文件 "c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\django_celery_results\backends\cache.py", 第 19 行,在获取 返回 self.cache_backend.get(key) 文件 "c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\django\core\cache\backends\db.py", 第 51 行,在获取 return self.get_many([key], version).get(key, default) File "c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\django\core\cache\backends \db.py", 第 59 行,在 get_many 中 self.validate_key(key) 文件 "c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\django\core\cache\backends\base.py", 第 249 行,在 validate_key 中 对于 memcache_key_warnings(key) 中的警告:文件“c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\django\core\cache\backends\base.py”, 第 287 行,在 memcache_key_warnings 中 if ord(char)

我不明白错误是什么以及如何解决?

【问题讨论】:

    标签: python django celery


    【解决方案1】:

    @sortfact- 尝试以下操作。它有很好的界面,您可以在管理员中访问,并且有一些非常棒的配置,您可以使用它来配置调度程序。

    https://django-celery-beat.readthedocs.io/en/latest/
    

    【讨论】:

    • 我不明白我应该在哪里以及如何使用this code
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    相关资源
    最近更新 更多