gpt4 book ai didi

python - Django 3.0 : Running backgound infinite loop in app ready()

转载 作者:太空宇宙 更新时间:2023-11-03 19:55:43 25 4
gpt4 key购买 nike

我正在尝试找到一种方法,从 ready() 每 x 秒不断轮询服务器Django 的功能,基本上是这样的:

from django.apps import AppConfig


class ApiConfig(AppConfig):
name = 'api'

def ready(self):
import threading
import time
from django.conf import settings
from api import utils

def refresh_ndt_servers_list():
while True:
utils.refresh_servers_list()
time.sleep(settings.WAIT_SECONDS_SERVER_POLL)

thread1 = threading.Thread(target=refresh_ndt_servers_list)
thread1.start()

我只想要我的utils.refresh_servers_list()当 Django 启动/准备好时执行,并每隔 settings.WAIT_SECONDS_SERVER_POLL 重新执行相同的方法(填充我的数据库)无限秒。问题是如果我运行 python manage.py migrate ready()函数被调用并且永远不会完成。我想避免在迁移过程中调用此函数。谢谢!

最佳答案

AppConfig.ready() 用于“...执行初始化任务...”并使您的应用程序准备好运行/服务请求。实际的应用程序工作逻辑应该在 django 应用程序初始化之后运行。

要定期启动任务,可以使用cron作业。

或者,设置定期 celery任务 celery beat .

此外,提供的任务似乎正在数据库中执行更新(对于它来说原子是好事)。对于它来说,只有单个运行实例可能是至关重要的。一个 cronjob 实例或一个 celery 任务就可以解决这个问题。

但是,如果上一个作业尚未完成或由于某种原因只是手动启动,则下一个作业可能仍会运行 - 在任务中添加一些锁定逻辑以检查可能需要只运行一个(或锁定数据库表以供运行)。

关于python - Django 3.0 : Running backgound infinite loop in app ready(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59550197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com