首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在django中定期运行代码?

如何在django中定期运行代码?
EN

Stack Overflow用户
提问于 2021-02-19 18:25:08
回答 1查看 196关注 0票数 0

为此,我希望定期运行django中的代码,为此,我下载了芹菜并尝试配置它。

添加到settings.py中

代码语言:javascript
复制
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文件

代码语言:javascript
复制
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文件

代码语言:javascript
复制
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)

依次推出一切

代码语言:javascript
复制
python manage.py runserver
celery -A shop worker -l INFO
celery -A shop beat -l INFO

打我

芹菜v5.0.5 (奇点)开始。__ -. __ -_ LocalTime -> 2021-02-18 20:31:57配置-> .代理-> amqp://来宾:**@localhost:5672//。装载机-> celery.loaders.app.AppLoader .调度器-> celery.beat.PersistentScheduler .db ->赛利贝特-日程安排。日志文件-> stderr@%INFO。最大间隔-> 5.00分钟(300秒) 2021-02-18 20:31:57,062: INFO/MainProcess beat: Starting.2021-02-18 20:31:57,216: INFO/MainProcess Scheduler:每-15秒发送适当的任务(offers.tasks.send_email)

但是工人每15秒就扔掉下一个

c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\celery\app\trace.py:617: RuntimeWarning:

2021-02-19 16:18:02,275:/SpawnPoolWorker- 1 RuntimeWarning: TypeError('ord()预期长度为1的字符串,但int ‘):跟踪(最近调用):trace_task request=task_request中的文件"c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\celery\app\trace.py",行400,文件"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,在"c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\celery\backends\base.py","c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\django_celery_results\backends\cache.py",中,_store_result current_meta = self._get_task_meta_for(task_id)文件行869,_get_task_meta_for meta = self.get(self.get_key_for_task(task_id))第19行,在get返回文件(键) "c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\django\core\cache\backends\db.py","c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\django\core\cache\backends\db.py",第51行,在get返回self.get_many(键,版本).get(键,默认)文件“c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\django\core\cache\backends\db.py”,第59行,在"c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\django\core\cache\backends\base.py",get_many self.validate_key(key) get_many self.validate_key(Key)文件第249行中,在validate_key中memcache_key_warnings(Key)中用于警告:文件self.validate_key第287行,在memcache_key_warnings中,如果ord(char) < 33或ord(char) == 127: TypeError: ord()期望字符串长度为1,但int找到

我不明白什么是错误,以及如何纠正它?

EN

回答 1

Stack Overflow用户

发布于 2021-02-19 18:34:15

@sort事--试一试以下几个。它有很好的界面,您可以访问管理,并有一些非常棒的配置,您可以使用它来配置调度程序。

代码语言:javascript
复制
https://django-celery-beat.readthedocs.io/en/latest/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66283063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档