我有一个桌面应用程序,我正在移植到Django webapp。该应用程序有一些非常计算密集的部分(使用numpy,scipy和pandas,以及其他库)。显然,将计算密集型代码导入webapp并运行它并不是一个好主意,因为这将迫使客户端等待响应。
因此,您必须将这些任务归于后台进程,该进程通知客户端(我猜是通过AJAX)和/或在数据库完成时将结果存储在数据库中。
在多个并发用户的情况下,您也不希望所有这些任务同时运行,因为即使只有少量并发请求,这也是让服务器瘫痪的好方法。理想情况下,您希望webapp的每个实例将其任务放入作业队列,然后以最佳方式自动运行它们(基于内核数量,可用内存等)。
有没有好的Python库来帮助解决这类问题?是否存在人们在这种情况下使用的一般策略?或者这只是选择一个好的批处理调度程序并为每个进程生成一个新的Python解释器的问题?
答案 0 :(得分:8)
我们开发了一个Django网络应用程序,它可以进行繁重的计算(每个进程在高端服务器上完成需要11到88个小时)。
Celery: Celery是基于分布式消息传递的异步任务队列/作业队列。它专注于实时操作,但也支持调度。
芹菜提供
这只是冰山一角。芹菜提供了很多功能。看看documentation& FAQ。
你还需要设计一个非常好的canvas for workflow。例如,在多个并发用户的情况下,您不希望所有任务同时运行,因为它是资源消耗。此外,您可能希望根据当前在线用户安排任务。
此外,您还需要非常好的数据库设计,高效的算法等。