后台运行任务-三零卫士工业防火墙系统技术白皮书
4.18后台运行任务在web2py中,每一个HTTP请求在它自己的线程中被服务,线程被回收以提高效率并且线程由web服务器管理。出于安全考虑,Web服务器对每个请求设置超时时间,这意味着,动作不应该执行耗时太长的任务,不应该创建新的线程,不应该派生进程(可以这么做但不推荐)。执行耗时的任务的正确方法是后台执行,没有一种完成它的方法,但在这里我们将介绍web2py内置的三种机制:cron、homemade task queues和scheduler。我们所说的cron是web2py中的一个不专属于UNIX cron机制的功能,web2py cron也适用于windows,web2py cron是应该选择的方法,如果在后台你需要定时任务并且这些任务需要的时间与两个调用之间的时间间隔相对比较短。每个任务都在自己的进程中运行,可以同时运行多个任务,但不能控制有多少任务运行,如果不小心一个任务与自身重叠,可能会导致数据库锁定和内存使用量激增。web2py的调度采用不同的方法,正在运行的进程数目是固定的,并且它们可以在不同的机器上运行。每个进程被称为一个工人,每个工人取一个可用任务并在预定时间之后尽快执行该任务,但不一定是在确切的时间。正在运行的进程数不能多于预定任务数,这样不会有内存使用激增,调度程序的任务可以被定义在模型中并且存储在数据库中, web2py的调度没有实现分布式队列,因为它假定分配任务的时间与运行任务的时间相比是微不足道的,工人从数据库中取任务。在某些情况下,自制任务队列可以是web2py调度的一个简单替代。 4.18.1 Cron web2py的cron以与平台无关的方式为应用提供在预设时间执行任务的能力。对于每个应用,cron功能由crontab文件定义: 1 app/crontab这遵循ref. [cron]中定义的语法(有一些特定于web2py的扩展)。这意味着,每个应用可以有一个单独的cron配置并且可以在web2py中改变cron配置而不影响主机操作系统本身。这里是一个例子: 1 0-59/1 * * root python /path/to/python/script.py 2 30 3 * * * root *applications/admin/cron/db_vacuum.py 3 */30 * * root **applications/admin/cron/something.py 4 @reboot root *mycontroller/myfunction 5 @hourly root *applications/admin/cron/expire_sessions.py这个例子中的最后两行使用扩展规范cron语法以提供额外的web2py功能。文件"applications/admin/cron/expire_sessions.py"实际存在并附带admin应用,它检查过期会话并删除它们,"applications/admin/crontab"按小时执行此任务。
4.16MB
文件大小:
评论区