我正在用Django编写一个web应用程序,用户可以在其中上传带有统计数据的文件。
数据需要经过处理才能正确使用(每个数据集可能需要几分钟的时间才能完成处理)。我的想法是使用python线程来实现这一点,并将数据处理卸载到一个单独的线程中。
然而,由于我使用了uwsgi,我读到了一个名为"Spoolers"的功能。这方面的文档很短,但我认为这可能是我想要的。不幸的是,uwsgi的-Q
选项需要一个目录,这让我很困惑
不管怎样,实现像worker线程这样的东西的最佳实践是什么,这些线程不会阻塞uwsgi的web worker,这样我就可以在后台可靠地处理数据,同时仍然可以访问Django的数据库/模型?我应该使用线程吗?
所有卸载子系统都需要某种"队列"来存储"要做的事情"。
uWSGI后台处理程序使用类似打印机的方法,其中目录中的每个文件都是一个任务。任务完成后,文件将被删除。其他系统依赖于更重/更高级的服务器,如rabbitmq
最后,不要直接使用后台处理程序的底层api,而是依赖于装饰器:
http://projects.unbit.it/uwsgi/wiki/Decorators