Drupal 7文档将Batch API引入为:
该函数允许将表单处理分散到多个页面请求中,从而确保不会因PHP超时而中断处理。
我的意思是说Batch为开发人员处理了与超时有关的问题。
但是,其他帖子(例如,批处理API在内部如何工作?)暗示开发人员有责任在等待另一个用户到达并再次调用Batch之前,告诉Batch要做多少工作—从而避免了超时。
如果后者是正确的,那么我认为Batch不保证作业不会超时。批次是否提供任何保证?是否由开发人员猜测在超时之前可以处理多少个批处理?
谢谢!
Drupal 7文档将Batch API引入为:
该函数允许将表单处理分散到多个页面请求中,从而确保不会因PHP超时而中断处理。
我的意思是说Batch为开发人员处理了与超时有关的问题。
但是,其他帖子(例如,批处理API在内部如何工作?)暗示开发人员有责任在等待另一个用户到达并再次调用Batch之前,告诉Batch要做多少工作—从而避免了超时。
如果后者是正确的,那么我认为Batch不保证作业不会超时。批次是否提供任何保证?是否由开发人员猜测在超时之前可以处理多少个批处理?
谢谢!
Answers:
Batch简单地说:“我最多将执行N项操作,然后刷新页面……并执行更多操作。”
如果您说每个作业块执行5个项目,每个项目花费5秒,那么默认php超时值为30秒就可以了。
如果您说每个作业块执行20个项目,每个项目花费5秒,则每个请求的工作量太高,可能会超时。
请记住,当您使用PHP时,页面的生命周期是request in -> response out。并且您的网络服务器可以使每个线程在有限的时间内保持活动状态。您必须解决该超时问题-Batch API可以帮助您完成。
使用诸如Migrate之类的社区模块在服务器端运行Drush等东西可以帮助您完全避免超时(如果需要)。
编辑
还请记住,每个页面请求都是完整的drupal引导程序,并且Batch API从中断的地方开始提取。使用Batch API时,这是最昂贵的操作之一,每N个项目会重新加载drupal。这就是为什么人们一直在研究服务器端技术来创建节点,导入内容等的原因。Batch API非常适合简单,重复的任务。但是在复杂的数据集或非常大的数据集中它往往会崩溃。
批处理API只需通过即可注册_batch_shutdown()为关机功能register_shutdown_function()。该函数只是将正在执行的批处理的当前状态保存在数据库表中。
Batch API不能保证您正在执行的操作不会在中间被中断。这就是批处理操作通常执行简单操作的原因,例如从保存表中读取数据库行并将数据库行保存在另一个表中。