首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django在应用程序启动时运行代码,但不在迁移时运行

Django在应用程序启动时运行代码,但不在迁移时运行
EN

Stack Overflow用户
提问于 2016-06-20 14:43:24
回答 4查看 2.4K关注 0票数 8

嗨,我想启动一个后台线程,它在我的应用程序第一次运行时运行。我已经使用应用程序配置的ready()函数实现了它。

代码语言:javascript
运行
复制
class MyappConfig(AppConfig):
    name = 'myApp'
    
    def ready(self):
        try:
            thread = threading.Thread(target=xxxx)
        except:
            pass          

问题是,当Django运行它的迁移时,这个方法也会被调用,但它不应该这样做。我如何才能防止这种情况的发生。

我尝试过使用Django后台任务,但它根本不会运行任务

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-06-20 16:24:19

如果使用python manage.py migrate调用脚本,则可以避免执行代码:

代码语言:javascript
运行
复制
import sys
if not 'manage.py' in sys.argv:
    ....
票数 8
EN

Stack Overflow用户

发布于 2020-08-09 21:09:12

我发现最好的方法是检查runserver是否在sys.argv

代码语言:javascript
运行
复制
from django.apps import AppConfig
import sys

class config(AppConfig):
    name = 'appName'
    if 'runserver' in sys.argv:
        do_main_thread()

这比manage.py工作得更好,因为在我用于migratemakemigrationsrunserver的每个命令中都有这个参数。

票数 1
EN

Stack Overflow用户

发布于 2021-08-26 05:20:32

准备了我的版本如何避免在Django应用程序启动时在后台启动自定义线程。

例如,如果您正在设置webhooks或推送另一个服务。并希望在迁移或任何其他命令期间避免这种情况,除了manage.py runserver和使用gunicorn启动web服务器之外。

代码语言:javascript
运行
复制
import logging
import sys
from django.apps import AppConfig

logger = logging.getLogger(__name__)


class config(AppConfig):

    def ready(self):
        if not sys.argv[0].endswith('gunicorn') and \
                sys.argv[0].endswith('manage.py') and 'runserver' not in sys.argv:
            logger.debug('Not starting extra threads here.')
            return

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

https://stackoverflow.com/questions/37916077

复制
相关文章

相似问题

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