【问题标题】:Django background infinite loop process managementdjango后台死循环进程管理
【发布时间】:2016-02-26 01:47:10
【问题描述】:

我在尝试找出使用 Django 运行具有特定要求的后台进程的最佳方法时遇到了麻烦。

我想做的事:

  • 进程一旦启动就会无限循环运行(需要 2 个后台进程,不多也不少)
  • 每个进程的启动/停止/Get_Status
  • 能够访问 Postgres DB(排除子进程模块(我认为))
  • 即使没有用户访问过该网站,该进程也会在启动后继续在后台运行。

编辑:

  • 当我需要运行的任务启动时,它必须使用 DB 信息初始化自己,以便收集它需要的内容。初始化后,它将新信息与之前的结果进行比较以获得增量值。不幸的是,每次任务运行时都重新初始化会破坏这个目的,除非用户故意停止,否则它必须连续循环运行。

我考虑过的选项,但未能找到可靠的文档说明如何做我想做的事:

  • 芹菜
  • RQ
  • django-background-task

我在 virtualenv 中的 requirements.txt(目前正在尝试让 celery 工作):

  1 amqp==1.4.7
  2 anyjson==0.3.3
  3 billiard==3.3.0.21
  4 celery==3.1.19
  5 Django==1.8.6
  6 django-crispy-forms==1.5.2
  7 kombu==3.0.29
  8 psycopg2==2.6.1
  9 pytz==2015.7
 10 redis==2.10.5
 11 requests==2.8.1
 12 uWSGI==2.0.11.2
 13 wheel==0.24.0

如果我没有就我的问题提供足够的信息,我提前道歉(这是我第一次发帖)。

【问题讨论】:

  • 为什么后台进程需要用Django写???
  • 更重要的是,为什么您需要在无限循环上运行的进程,为什么特别是两个?您在这些过程中到底在做什么?
  • @AngelCruijff,这是我选择在其中完成项目其余部分的框架。
  • @DanielRoseman,这是我正在制作的应用程序的一部分,用于对属于我自己的域/网站/ips 进行定期扫描,以检查公开可见的恶意活动。它将使用“dig”、“whois”和“wget”。

标签: python django multithreading postgresql celery


【解决方案1】:

我认为 Celery 只适合你。您可以查看pereodic tasks 了解一些后台任务。

此外,在 Django 中使用 Celery 也很容易。你可以开始学习了here

【讨论】:

  • 感谢您提供的链接 pythad。我查看了周期性任务,似乎 beat 或 cron 调度程序都不适合我,因为据我了解,它每次运行时都会重新创建任务?当我需要运行的任务开始时,它必须使用 DB 信息初始化自己,以便收集它需要的内容。初始化后,它将新信息与之前的结果进行比较以获得增量值。不幸的是,每次任务运行时重新初始化都会破坏这个目的。对不起,我应该更清楚!我会更新问题。
  • @Vealor,task 只是一个 python 函数,你可以在其中做任何事情。您可以在函数内部从 db 获取数据,与某些内容进行比较并返回您想要的任何内容。
  • 我明白,我唯一担心的是我必须使用系统命令,例如 dig、whois 和 wget。当要重新运行任务时,我需要将所有先前的数据“归零”,这样我就可以重新初始化运行这些命令所获得的基线,然后开始比较任务,直到进程被用户。
  • 在考虑了一下之后....被按下而不是在每个任务创建时。这是否意味着我可以将每个任务分开并运行多个任务?因此,如果我假设要运行 200 个系统命令,我可以使用子进程来执行每个命令,并且还可以在队列中单独执行每个命令?这似乎是一种比我最初设想的更好的方法.....
  • @Vealor,是的,你可以试试这个。您可以通过单击创建任务并将它们放入队列中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 2017-06-15
  • 1970-01-01
相关资源
最近更新 更多