Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django、信号和另一个进程_Python_Django_Multiprocessing_Signals - Fatal编程技术网

Python Django、信号和另一个进程

Python Django、信号和另一个进程,python,django,multiprocessing,signals,Python,Django,Multiprocessing,Signals,我的Django项目运行良好,还有一个单独的后台进程,它将从各种来源收集数据并将数据存储在索引中 我在Django应用程序中有一个名为Sources的模型,它本质上包含一个数据来源列表!我成功地创建了一个信号,当在Sources模型中放入新条目时,该信号被激活/调用 我的问题是,有没有一种大家都知道的简单方法,可以让我向后台进程发送某种形式的信号/消息,表明源模型已经更改?或者我应该每x秒轮询一次更改,因为这要简单得多 非常感谢您提供的帮助。如果您不需要分秒延迟,轮询可能是最简单的 但是,如果你

我的Django项目运行良好,还有一个单独的后台进程,它将从各种来源收集数据并将数据存储在索引中

我在Django应用程序中有一个名为
Sources
的模型,它本质上包含一个数据来源列表!我成功地创建了一个信号,当在
Sources
模型中放入新条目时,该信号被激活/调用

我的问题是,有没有一种大家都知道的简单方法,可以让我向后台进程发送某种形式的信号/消息,表明
模型已经更改?或者我应该每x秒轮询一次更改,因为这要简单得多


非常感谢您提供的帮助。

如果您不需要分秒延迟,轮询可能是最简单的

但是,如果你这样做了,那么你可能会想调查其中任何一个,比如

  • 向进程发送UNIX信号(或IPC的其他方法,取决于平台)
  • 让后台进程有一个简单的监听套接字,您只需向它发送一个字节(无可否认,这是IPC的一种形式),它就会触发您想要触发的操作
  • 或者某种任务/消息队列。或者我会想到

    • 不清楚您是如何运行您所说的后台进程的

      无论如何,我建议您在后台任务中直接使用
      源代码
      模型。有一些方便的方法可以在不离开Django领域的情况下运行任务(以便访问您的模型。例如,您可以使用芹菜[1]或RQ[2]

      这样您就不需要传递任何消息,对
      模型的任何更改都将在下次运行任务时生效

      [1] 芹菜是一个开源的异步任务队列/作业队列,它不难设置并与Django很好地集成

      [2] RQ的意思是“Redis队列”,它是“一个简单的Python库,用于将作业排队并在后台与工人一起处理它们”


      我认为你没有给我们足够的关于后台进程的信息。它们是什么?通过Python运行的东西
      多处理
      ?对不起-后台进程是完全独立的。由另一个命令在终端启动。太棒了,我想我应该试试芹菜。非常感谢你的回复!