我目前正在使用django开发一个网站,该网站存储在数据库中访问该网站的人的IP地址。这个想法是,每周午夜,网站在数据库中的每个项目上完成一个traceroute,然后使用pygame将每个跃点的地理位置映射到地图上。然后将该地图存储为图像并显示在网站上。
目前,一切都按预期进行。
我的 init .py文件目前看起来像这样:
import subprocess, sys
print "Starting scripts..."
P = subprocess.Popen([sys.executable, "backgroundProcess.py"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
print "...Scripts started"
当从命令提示符运行它时,或者甚至从gui运行它时它工作正常,如果时间正确,则正确绘制地图。但是,当网站启动时运行脚本时,文本将正确打印(启动脚本...和...脚本已启动)但未绘制地图。简而言之,我的问题是:django会限制您在 init .py文件中可以执行的操作吗?
答案 0 :(得分:0)
模块顶层的代码(无论是软件包' s __init__.py
还是只是任何常规模块)只在第一次导入此模块时每个进程执行一次。由于Django是使用长时间运行的进程提供的,因此只有在启动新进程时才会执行此代码。
计划后台任务的最简单解决方案是编写Django management command并从cron作业(或系统上的任何可用调度程序)调用它。你真的不需要这个子流程的东西......