我有一个桌面应用程序,正在将其移植到 Django Web 应用程序。该应用程序有一些计算量相当大的部分(使用 numpy、scipy 和 pandas 等库)。显然,将计算密集型代码导入到 Web 应用程序中并运行它并不是一个好主意,因为这将迫使客户端等待响应。
因此,您必须将这些任务分配给一个后台进程,该进程通知客户端(我猜是通过 AJAX)和/或在完成时将结果存储在数据库中。
您也不希望在多个并发用户的情况下同时运行所有这些任务,因为即使只有少量并发请求,这也是使服务器崩溃的好方法。理想情况下,您希望 Web 应用程序的每个实例将其任务放入作业队列中,然后以最佳方式自动运行它们(基于核心数量、可用内存等)。
有没有好的Python库可以帮助解决此类问题?人们在这种情况下是否使用通用策略?或者这只是选择一个好的批处理调度程序并为每个进程生成一个新的 Python 解释器的问题?
我们开发了一个 Django Web 应用程序,它执行大量计算(每个进程在高端服务器上需要 11 到 88 小时才能完成)。
Celery: http://www.celeryproject.org/Celery是一个基于分布式消息传递的异步任务队列/作业队列。它专注于实时操作,但也支持调度。
芹菜优惠
- 异步运行任务。
- 昂贵流程的分布式执行。
- 定期和/或计划任务。
- 如果出现问题,重试任务。
这只是冰山一角。 celery 提供了很多功能。看一眼文档 http://docs.celeryproject.org/en/latest/index.html & FAQ http://celery.readthedocs.org/en/latest/faq.html#faq.
你还需要设计一个非常好的工作流程画布 http://docs.celeryproject.org/en/latest/userguide/canvas.html。例如,您不希望在多个并发用户的情况下所有任务同时运行,因为这是一种资源消耗。此外,您可能希望根据当前在线的用户来安排任务。
您还需要非常好的数据库设计、高效的算法等等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)