Django:我应该开始一个单独的过程吗?

Fun*_*der 8 django process

我正在编写一个允许用户在文件中上传数据的应用程序; 该应用程序将处理此数据,并将结果通过电子邮件发送给用户.处理可能需要一些时间,所以我想在Python脚本中单独处理它,而不是在视图中等待它完成.Python脚本和视图不需要通信,因为脚本将从视图写入的文件中获取数据.该视图将显示一条消息,例如"感谢您上传数据 - 结果将通过电子邮件发送给您"

在Django中最好的方法是什么?产生一个单独的过程?把东西放在队列上?

一些示例代码将非常感激.谢谢.

knu*_*tin 17

最简单的解决方案是编写一个自定义命令,搜索所有未处理的文件,处理它们,然后通过电子邮件发送给用户.管理命令在Django框架内运行,因此它们可以访问所有模型,数据库连接等,但您可以从任何地方调用它们,例如crontab.

如果您关心文件上传和处理开始之间的时间范围,您可以使用像Celery这样的框架,它基本上是一个帮助程序库,用于使用消息队列和运行工作人员监听队列.这将是相当低的延迟,但另一方面,简单性对您来说可能更重要.

我强烈建议不要在视图中启动线程或生成进程,因为线程将在django进程内运行并可能破坏您的Web服务器(取决于您的配置).子进程将继承您可能不想要的Django进程中的所有内容.最好将这些东西分开.