使用web2py的异步后台进程

Ken*_*yer 8 python asynchronous web2py python-2.x

我需要在控制器方法内部调用的web2py应用程序中异步处理大量(耗费时间和内存的)进程.

我的具体用例是通过调用进程stdlib.subprocess并等待它退出而不阻止Web服务器,但我对其他方法持开放态度.

  • 动手实例将是一个加分.
  • 欢迎第三方图书馆推荐.
  • 不需要/想要CRON调度.

spi*_*ech 7

假设您需要启动后台任务的多个(可能是同时的)实例,该解决方案是一个任务队列.我听说过Celery和RabbitMQ的好东西,如果你正在寻找第三方选项,web2py包含它自己的任务队列系统,可能足以满足你的需求.

使用这两种工具,您将定义一个封装您希望后台进程执行的操作的函数.然后将任务队列工作人员联机.web2py手册和论坛表明这可以通过web2py cron系统中的@reboot语句完成,该语句在Web服务器启动时触发.如果不满意,可能还有其他方法可以启动工人.

在您的控制器中,您将任务插入任务队列,将任何必要的参数作为输入传递给函数(后台函数将不会在与控制器相同的环境中运行,因此它将无法访问会话,数据库等等,除非您明确地将适当的值传递给任务函数).

现在,将后台操作的输出提供给用户.将任务插入任务队列时,应该返回该任务的唯一ID.然后,您将实现控制器逻辑(要么需要AJAX调用,要么在任务完成之前保持刷新的页面)调用任务队列的API以检查指定任务的状态.如果任务的状态为"已完成",则将数据返回给用户.如果没有,请继续等待.