我正在处理的python项目有问题(我通常使用PHP / Java,因此缺乏一些知识)。基本上,我有一个使用Flask构建的python程序,该程序使用Shopify Python API将库存管理系统连接到Shopify。
当用户通过AJAX请求触发功能时,我需要启动通过Shopify API更新客户端Shopify商店中产品的功能/过程。这大约需要2个小时(大约需要7000种产品,而且必须先从库存管理系统中提取它们)。问题是我需要一种可以触发此功能/过程的方式,即使客户端关闭浏览器,该功能/过程也将继续运行。
如果有任何办法,我也可以使用该后台功能/进程的当前进度来更新前端,这将会使您受益匪浅。
如果有人知道实现此目的的任何库或资源,将不胜感激。我有一个google,但是我能找到的所有解决方案似乎都是针对CLI脚本而非Web脚本的。
谢谢堆,科里:)
您需要异步处理此任务,因为这是一项长期运行的工作,它将大大降低HTTP响应的性能(如果等到它完成时)。
另外,您可能会注意到,需要在为HTTP请求提供服务的当前过程的单独进程中运行此任务。因为,Web服务器(Gunicorn,uWSGI等)将产生它们创建的进程,并在需要时释放系统资源。很可能是因为关闭浏览器(请求已关闭)而导致通过Ajax启动的异步进程被Web服务器中断并杀死的情况。所以,threading
和coroutines
不适合这个任务的最佳工具。
这就是为什么有一些很酷的Task queue
项目可以解决您的问题的原因。我们可能会注意到:
Redis
,并RabbitMQ
作为消息中介还有很多 !
随着的兴起,micro services
您可以结合和的能力,Task queues
并且containers
可以构建一个单独的容器来处理长期运行的任务(并在当前情况下更新数据库)。另外,如果您还不能使用micro services
体系结构,则可以构建一个单独的服务器来处理这些任务,并使处理用户请求的Web服务器不再运行长时间运行的任务。
最后,您可以在这种情况下将这些解决方案组合到当前网站中:
Task ID
任务的Task ID
按API或其他方式返回,然后将其添加到与启动该过程的用户相关的会话cookie或单独的表中。Task ID
(在用户会话Cookie或数据库中)向后端请求任务状态并确保您可以改善这种情况!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句