underpin / background-process-loader
Underpin 的异步、后台进程加载器。
Requires
This package is auto-updated.
Last update: 2024-09-23 22:18:29 UTC
README
Background Processing 集成于 Underpin WordPress 框架。
由 Delicious Brains 原始描述
WP Background Processing 可用于触发非阻塞异步请求或作为后台处理工具,允许您排队任务。查看示例插件或阅读相关文章。
在 Underpin 中使用此工具的优点
- 所有操作都在 Underpin 的注册表中完成,这与后台处理的工作方式非常兼容。
- Underpin 扩展后台处理以使用 Underpin 的事件日志。
安装
使用 Composer
composer require underpin/background-process-loader
手动
此插件使用内置的自动加载器,只要 Background Processing 在此扩展之前是必需的,它应该按预期工作。
require_once(__DIR__ . '/underpin-background-processes/underpin-background-process.php');
设置
- 安装此加载器。
- 安装 Underpin。请参阅 Underpin 文档
- 创建
Background_Process
或Async_Request
类。 - 使用 Underpin 注册进程。
处理异步任务
来自 Delicious Brains
异步请求对于将慢速的一次性任务(如发送电子邮件)推送到后台进程非常有用。一旦请求被发送,它将立即在后台处理。
underpin()->async_requests()->add( 'key', [ 'action' => 'key', // Action Name. Must be unique. 'task_action_callback' => function () { // Callback to fire // do things }, ] );
您还可以扩展 Async_Request
并直接引用扩展类,如下所示
underpin()->async_request()->add('key','Namespace\To\Class');
一旦注册,您可以在任何时候运行操作,如下所示
underpin()->async_requests()->dispatch( 'key' );
处理后台进程
来自 Delicious Brains
后台进程的工作方式与异步请求类似,但允许您排队任务。一旦队列被发送,将处理队列中的项目。队列也将根据可用的服务器资源进行扩展,因此高端服务器将每批处理更多项目。一旦一批完成,下一批将立即开始。
默认情况下,每 5 分钟运行一次健康检查,以确保在队列中存在待处理项目时队列正在运行。如果队列失败,它将重新启动。
队列按照先到先服务的原则工作,这允许即使在队列正在处理时也可以向队列中推入更多项目。
您可以直接注册后台进程,就像注册任何其他加载器一样,如下所示
underpin()->background_processes()->add( 'example', [ 'action' => 'example_action_name', // Action Name. Must be unique. 'task_action_callback' => function ( $item ) { // Callback to fire on a single item. // Do an action }, ] );
task_action_callback
应包含对队列项执行任何逻辑的逻辑。返回 false 以从队列中删除项或返回 $item 以将其推回队列以供进一步处理。如果项已修改并被推回队列,则在退出批处理之前将保存当前状态。
或者,您可以扩展 Background_Process
并直接引用扩展类,如下所示
underpin()->background_processes()->add('key','Namespace\To\Class');
一旦注册,您可以将所需数量的项目添加到队列中
underpin()->background_processes()->enqueue( 'key', ['args' => 'to pass to task_action_callback'] );
最后,当您完成排队项目后,您可以发送处理器以在每个排队的项目上运行进程
underpin()->background_processes()->dispatch( 'key' );