【问题标题】:How to fork a process in python/django?如何在 python/django 中分叉一个进程?
【发布时间】:2012-02-27 15:43:12
【问题描述】:

这更像是一个 Python 的一般问题,但是在 django 的上下文中。

现在我在 django 中有这个视图,它必须处理大量数据。通常需要几分钟的时间来完成服务器(使用代理运行 django 的 nginx)。有时服务器超时。我不想增加 nginx 的超时时间。我意识到,如果我可以在 django 视图中的 python 中分叉一个进程,以便分叉的(子)进程将独立于 django 视图进行所有数据处理,那么该视图将能够立即将请求返回给用户(因此永远不会超时)并且子进程将继续在后台运行,完成所有计算。

那么问题来了:

如何在 python 中创建一个独立的进程(如果可能,python 代码可以在同一个文件中)?如果可能的话,我如何为它分配一个 unix 进程优先级?

我查看了一些在 python 中分叉进程的方法,似乎有一些选择。哪一个最适合这种情况?

谢谢。

【问题讨论】:

标签: python django process subprocess


【解决方案1】:

“最佳实践”的答案是使用队列管理器,通常是 RabbitMQ 或任何由 Django-celery 处理的后端。

不过,仍有一些更轻的选项会产生一个新线程。这些选项通常缺少一些跟踪进度或控制线程数量的方法。

检查Django-utils 看看是否足够。如果没有,请选择 Celery。

【讨论】:

    【解决方案2】:

    如果你真的想分叉并设置优先级,你可以使用os.forkos.nice,但我认为the multiprocessing moduleCelery在这里更适用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-15
      • 2012-04-19
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 2015-01-26
      相关资源
      最近更新 更多