如何在python/django中分叉一个进程?

4 投票
2 回答
4212 浏览
提问于 2025-04-17 12:24

这个问题主要是关于Python的,但是在Django的环境下讨论的。

目前我在Django中有一个视图需要处理大量数据。通常情况下,服务器(用nginx和Django的代理方式运行)处理这些数据需要几分钟。有时候服务器会超时。我不想在nginx中增加超时时间。我意识到如果我能在Django视图中创建一个新的进程,这个新进程(子进程)就可以独立于Django视图进行所有的数据处理,那么视图就可以立即把请求返回给用户(这样就不会超时),而子进程会在后台继续完成所有的计算。

所以我的问题是:

我该如何在Python中创建一个独立的进程(如果可能的话,代码可以放在同一个文件里)?如果可以的话,如何给这个Unix进程设置优先级?

我查了一些在Python中创建进程的方法,似乎有几种选择。哪一种最适合这种情况呢?

谢谢。

2 个回答

2

如果你真的想要创建一个新的进程并设置它的优先级,你可以使用 os.forkos.nice 这两个工具。不过,我觉得 使用 multiprocessing 模块 或者 Celery 可能会更合适一些。

5

最好的做法是使用一个队列管理器,通常是RabbitMQ或者Django-celery来处理后台任务。

不过,还有一些比较轻量的选项可以创建新的线程。这些选项通常缺少一些功能,比如跟踪进度,或者控制线程的数量。

可以看看Django-utils,看看它是否能满足你的需求。如果不行,那就选择Celery吧。

撰写回答