You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Django启动后并发运行多个Python文件直至项目终止

在Django中启动项目时并发运行多个Python文件的方案

当然有办法实现这个需求!下面给你几个实用的方案,你可以根据自己的场景(比如脚本是IO密集型还是CPU密集型,是否需要访问Django内部组件等)来选择:

方案1:自定义Django管理命令+多线程(适合IO密集型脚本)

你可以编写一个继承自默认runserver的自定义命令,在启动服务器的同时,用后台线程运行你的其他脚本。

步骤:

  1. 在你的Django应用下创建management/commands目录(如果没有的话),并添加__init__.py文件让Python识别为包。
  2. 创建runserver_with_workers.py文件,内容如下:
import os
import sys
import threading
from django.core.management.commands.runserver import Command as RunserverCommand

def run_script(script_path):
    """运行指定的Python脚本"""
    os.system(f"{sys.executable} {script_path}")

class Command(RunserverCommand):
    help = "启动Django服务器的同时运行额外的并发脚本"

    def handle(self, *args, **options):
        # 替换成你实际要运行的脚本路径
        target_scripts = [
            "/absolute/path/to/your/script1.py",
            "/absolute/path/to/your/script2.py"
        ]

        # 为每个脚本启动守护线程(主线程结束时自动终止)
        for script in target_scripts:
            script_thread = threading.Thread(target=run_script, args=(script,), daemon=True)
            script_thread.start()

        # 继续启动Django开发服务器
        super().handle(*args, **options)
  1. 运行命令:python manage.py runserver_with_workers,此时你的脚本会和Django服务器同时启动,终止服务器时脚本也会跟着停止。

方案2:自定义命令+多进程(适合CPU密集型脚本)

如果你的脚本是CPU密集型的,多线程因为GIL的限制效率不高,改用多进程会更合适。只需修改上面的代码,把threading.Thread换成multiprocessing.Process:

import os
import sys
import multiprocessing
from django.core.management.commands.runserver import Command as RunserverCommand

def run_script(script_path):
    os.system(f"{sys.executable} {script_path}")

class Command(RunserverCommand):
    help = "启动Django服务器的同时运行额外的并发脚本(多进程版)"

    def handle(self, *args, **options):
        target_scripts = [
            "/absolute/path/to/your/script1.py",
            "/absolute/path/to/your/script2.py"
        ]

        for script in target_scripts:
            script_process = multiprocessing.Process(target=run_script, args=(script,), daemon=True)
            script_process.start()

        super().handle(*args, **options)

方案3:用Honcho管理多进程(无需修改Django代码)

如果你不想改动项目代码,可以用honcho这个工具,它能同时启动多个进程并统一管理。

步骤:

  1. 安装Honcho:pip install honcho
  2. 在项目根目录创建Procfile文件,内容示例:
web: python manage.py runserver
worker1: python /absolute/path/to/script1.py
worker2: python /absolute/path/to/script2.py
  1. 运行命令:honcho start,所有定义的进程会同时启动;按下Ctrl+C终止时,所有进程都会被停止。

注意事项

  • 如果你的脚本需要访问Django的ORM、配置等内部组件,要在脚本开头添加Django环境初始化代码:
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings")
django.setup()
  • 确保脚本路径使用绝对路径,避免因工作目录变化导致找不到文件。

内容的提问来源于stack exchange,提问作者yegemen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 19:17:33