2012-08-31 29 views
0

我正在用Django编写一个Web应用程序,用户可以用统计数据上传文件。工作线程/队列在上传后处理数据集?

数据在正确使用前需要处理(每个数据集在处理完成前可能需要几分钟的时间)。我的想法是为此使用python线程,并将数据处理卸载到单独的线程中。

但是,由于我使用的是uwsgi,因此我已阅读了一个名为“Spoolers”的功能。关于这方面的文档相当短,但我认为这可能是我正在寻找的。不幸的是,uwsgi的-Q选项需要一个目录,这使我感到困惑。

无论如何,实现类似工作线程的最佳实践不妨碍uwsgi的web工作人员,以便我可以在后台可靠地处理数据,同时仍然可以访问Django的数据库/模型?我应该使用线程吗?

回答

0

所有的卸载子系统都需要某种'队列'来存储'要做的事情'。

uWSGI后台打印程序使用类似打印机的方法,其中目录中的每个文件都是任务。当完成文件中的任务被移除时。其他系统依赖于更重的/高级的服务器,比如rabbitmq等等。

最后,不要直接使用后台打印程序的低级别的API,但依靠装饰:

http://projects.unbit.it/uwsgi/wiki/Decorators

+0

现在我不得不为所有(完成和未完成的)数据集数据库记录,每他们使用“状态”字段,因此我可以随时向用户提供反馈。我会写什么文件到这些文件?每个要处理的数据集的UUID或主键?假脱机程序代码在哪里运行(在哪个进程中)?我可以从那里访问任何东西,比如models/db,还是有任何限制? – BastiBen

+0

假脱机程序可能被视为“无关联”的工作人员。它是一名工作人员,但无法在套接字上接收请求。所以,后台处理程序可以访问所有的django内部。另一个解决方案(更通用)是使用mules,它们是一个更为prymitive的实现,允许您直接与数据库进行交互(不需要在spooler目录中保存任务)http://projects.unbit.it/uwsgi/wiki/Mules – roberto

+0

Looks像骡子是我正在寻找的东西。谢谢! – BastiBen