即使用户关闭了Web浏览器/选项卡,如何运行Python 3功能?

Fishingfon:

我正在处理的python项目有问题(我通常使用PHP / Java,因此缺乏一些知识)。基本上,我有一个使用Flask构建的python程序,该程序使用Shopify Python API将库存管理系统连接到Shopify。

当用户通过AJAX请求触发功能时,我需要启动通过Shopify API更新客户端Shopify商店中产品的功能/过程。这大约需要2个小时(大约需要7000种产品,而且必须先从库存管理系统中提取它们)。问题是我需要一种可以触发此功能/过程的方式,即使客户端关闭浏览器,该功能/过程也将继续运行。

如果有任何办法,我也可以使用该后台功能/进程的当前进度来更新前端,这将会使您受益匪浅。

如果有人知道实现此目的的任何库或资源,将不胜感激。我有一个google,但是我能找到的所有解决方案似乎都是针对CLI脚本而非Web脚本的。

谢谢堆,科里:)

Chiheb Nexus:

您需要异步处理此任务,因为这是一项长期运行的工作,它将大大降低HTTP响应的性能(如果等到它完成时)。

另外,您可能会注意到,需要在为HTTP请求提供服务的当前过程的单独进程中运行此任务。因为,Web服务器(Gunicorn,uWSGI等)将产生它们创建的进程,并在需要时释放系统资源。很可能是因为关闭浏览器(请求已关闭)而导致通过Ajax启动的异步进程被Web服务器中断并杀死的情况。所以,threadingcoroutines不适合这个任务的最佳工具。

这就是为什么有一些很酷的Task queue项目可以解决您的问题的原因。我们可能会注意到:

  • Celery:(生产就绪解决方案)这是一个任务队列,着重于实时处理,同时还支持任务调度。与工作得很好Redis,并RabbitMQ作为消息中介
  • RQ(Redis队列):RQ(Redis Queue)是一个简单的Python库,用于对作业进行排队并在后台与工作人员进行处理。它由Redis支持,其设计目的是降低进入门槛。它可以轻松地集成到您的Web堆栈中。
  • Taskmaster:Taskmaster是一个简单的分布式队列,旨在处理大量的一次性任务。
  • Huey:是一个基于Redis的任务队列,旨在为执行任务提供一个简单而灵活的框架。Huey支持任务调度,类似crontab的重复任务,结果存储以及在发生故障时自动重试。
  • Dramatiq:是芹菜的快速,可靠的替代品。它支持RabbitMQ和Redis作为消息代理。
  • APScheduler:高级Python计划程序(APScheduler)是一个Python库,可让您安排Python代码稍后执行,一次或定期执行。

还有很多 !

随着的兴起,micro services您可以结合和的能力,Task queues并且containers可以构建一个单独的容器来处理长期运行的任务(并在当前情况下更新数据库)。另外,如果您还不能使用micro services体系结构,则可以构建一个单独的服务器来处理这些任务,并使处理用户请求的Web服务器不再运行长时间运行的任务。

最后,您可以在这种情况下将这些解决方案组合到当前网站中:

  • 用户单击一个按钮。
  • Ajax请求触发您的后端(通过API或其他方式)
  • 您可以在经纪人消息中安排任务以现在或以后运行(在单独的容器/ VPS中)。
  • 在后端,您检索Task ID任务的
  • 您可以Task ID按API或其他方式返回,然后将其添加到与启动该过程的用户相关的会话cookie或单独的表中。
  • 在某些JS中,您一直在后端Task ID(在用户会话Cookie或数据库中)向后端请求任务状态
  • 即使用户关闭了浏览器,任务也将继续其操作,直到完成或引发异常为止。在任务ID中,您已经可以轻松地知道该任务的状态,并将此信息发送给用户(当用户再次登录时,在视图中,通过电子邮件等)。

并确保您可以改善这种情况!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在主选项卡的新选项卡上运行功能?(谷歌浏览器)

以编程方式访问Web浏览器选项卡| 迅捷3

如何使用浏览器后退功能关闭图层?

如何使用python在Web浏览器中打开选项卡

用户单击关闭选项卡时如何打开新窗口浏览器?

Sublime-text3中的MarkdownPreview将打开Signal应用程序,而不是浏览器选项卡

如何删除PrimeNG编辑器的选项卡功能

当用户关闭基于 django2.0 的网站上的选项卡或浏览器时,如何强制注销用户

即使在浏览器选项卡关闭后也保留令牌

Ionic 3 如何使用选项卡关闭模式并将数据传递给父级

如何使用ODS HTML命令更改Web浏览器选项卡中的“ SAS输出”?

仅在函数完成运行后使用 window.close() 关闭浏览器选项卡

useEffect挂钩,用于在用户关闭浏览器选项卡时保存到localStorage

当用户关闭浏览器选项卡时,我想将数据发布到API

如何在JS中关闭浏览器选项卡或浏览器关闭上的会话?

Python和Selenium-关闭所有选项卡而不关闭浏览器

如何使用 Python 3 在 Web 浏览器中打开网站?

Reactjs浏览器选项卡关闭事件

检测 Bokeh 中的浏览器选项卡关闭

JavaScript浏览器关闭事件(“ nob”选项卡)

在关闭浏览器选项卡上发送邮件

用户在Chromium中打开新选项卡时运行指定的功能

python重复功能3次

python 3+的缓冲功能

如何在浏览器或选项卡关闭上实现Session.Abandon()?

如何关闭浏览器窗口中的当前选项卡?

如何恢复意外关闭的浏览器选项卡?

关闭浏览器窗口/选项卡时如何删除localStorage项目?

如何关闭知道进程ID的浏览器选项卡?