首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Django-q的Django调度任务

使用Django-q的Django调度任务
EN

Stack Overflow用户
提问于 2020-03-03 14:12:58
回答 2查看 1.6K关注 0票数 0

我正在尝试使用Django-q运行计划任务我遵循了文档,但它没有运行

这是我的配置

代码语言:javascript
复制
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'db_cache_table',
    }
}


Q_CLUSTER = {
    'name': 'DjangORM',
    'workers': 4,
    'timeout': 90,
    'retry': 120,
    'queue_limit': 50,
    'bulk': 10,
    'orm': 'default'

}

这是我的计划任务

未执行任何操作,请帮助

EN

回答 2

Stack Overflow用户

发布于 2021-01-30 15:49:36

一开始,我也遇到了处理计划任务的问题,但最终还是找到了一个工作流程。

我在windows机器上运行django-q,使用django ORM作为代理。在讨论我提出的执行例程之前,让我们先快速检查一下我的模块,从..开始。

settings.py:

代码语言:javascript
复制
Q_CLUSTER = {
    "name": "austrian_energy_monthly",
    "workers": 1,
    "timeout": 10,
    "retry": 20,
    "queue_limit": 50,
    "bulk": 10,
    "orm": "default",
    "ack_failures": True,
    "max_attempts": 1,
    "attempt_count": 0,
}

。。和我的文件夹结构:

如您所见,我的django项目的文件夹在src文件夹中。此外,还有一个我为这个项目创建的应用程序的文件夹,它被简单地称为" app“。在app文件夹中,我有另一个名为"cron“的文件夹,其中包含以下与调度相关的文件和函数:

tasks.py

我没有使用django-q提供的schedule()方法,而是直接使用创建表(参见:django-q official schedule docs)

代码语言:javascript
复制
from django.utils import timezone
from austrian_energy_monthly.app.cron.func import create_text_file

from django_q.models import Schedule

Schedule.objects.create(
    func="austrian_energy_monthly.app.cron.func.create_text_file",
    kwargs={"content": "Insert this into a text file"},
    hooks="austrian_energy_monthly.app.cron.hooks.print_result",
    name="Text file creation process",
    schedule_type=Schedule.ONCE,
    next_run=timezone.now(),
)

确保将"right“路径分配给"func”关键字。仅仅使用"func.create_text_file“对我来说是行不通的,即使这些文件放在同一个文件夹中。"hooks“关键字也是如此。

(注意:我已经通过setup.py将我的项目设置为一个开发包,这样我就可以从我的src文件夹中的任何地方调用它)

func.py:

包含由明细表对象调用的函数。

代码语言:javascript
复制
def create_text_file(content: str) -> str:
    file = open(f"copy.txt", "w")
    file.write(content)
    file.close()
    return "Created a text file"

hooks.py:

包含调度进程完成后调用的函数。

代码语言:javascript
复制
def print_result(task):
    print(task.result)

现在让我们看看我是如何通过上面描述的文件示例来运行执行的:

  1. 首先我已经安排了“文本文件创建过程”。因此,我使用了"python manage.py shell“并导入了tasks.py模块(您可能也可以通过管理页面安排一切,但我还没有对此进行测试):

您现在可以看到计划的任务,在管理页面的成功列上有一个问号(选项卡"Scheduled tasks",如您的图片所示):

我打开了一个新的终端并使用“

  1. After manage.py qcluster”启动了集群,在终端中产生了以下输出:

可以通过在终端中查看"13:22:17 Q INFO Processed ten-virginia hook“以及钩子打印语句"Created a text file”来检查成功的执行。此外,您还可以在管理页面的"Successful Tasks“选项卡下查看它,在那里您应该会看到:

希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2020-03-03 15:07:28

Django-q不支持windows。:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60501065

复制
相关文章

相似问题

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