firehed / workers
Requires (Dev)
- phpstan/phpstan: ^0.7.0
- phpunit/phpunit: ^6.2
- squizlabs/php_codesniffer: ^3.0
This package is auto-updated.
Last update: 2024-08-29 04:31:24 UTC
README
一个用于在运行循环中管理工作进程的库。
工作进程管理器
任何运行循环的核心是工作进程管理器。它将跟踪执行次数,设置基本的 POSIX 信号处理,以及其他基本基础设施。
工作进程类
实际任务由一个工作进程类执行 - 任何实现 Firehed\Workers\Worker
的类。
getName(): string
这是工作进程类型的标识符。使用 return __CLASS__;
是一个合理的实现,但如果在后台运行时指定工作进程,可能会产生更多的工作。
getNice(): int
进程的 nice
级别,它控制整体系统优先级。一个介于 -20 和 20 之间的数字。-20 是最高优先级(不要设置得这么高,否则可能会使系统无响应);+20 是最低优先级。返回 Worker::NICE_DEFAULT
(0) 以不影响优先级。
getProcessTitle(): string
如果此值不为空,则管理器将尝试更新在类似 top
的实用程序中可见的进程标题。并非所有操作系统都支持此功能。
getRunLimit(): int
在执行这么多迭代后退出运行循环。对于可能消耗比期望更多的内存的工作进程,这是一个干净退出很有用的功能。返回 Worker::RUN_LIMIT_UNLIMITED
以不强制限制。
请注意,实现应避免依赖此功能,尽管人们普遍理解 PHP 代码通常在最初设计为围绕网络的“一次性和死亡”模型时会导致资源悬挂。
work(): bool
执行实际工作。这应该获取一个单独的工作并执行它。实现可能从数据库中读取一行,从工作队列中获取一个工作等。
工作进程的 work()
方法仅在未尝试工作(队列中没有内容等)时才应返回 false
。如果尝试工作但失败,则应仍然返回 true
。
在 Docker 中使用:前台工作进程
调用 WorkerManager->runInForeground($name)
在前台运行单个工作进程。这对于围绕容器化(Docker)设计的应用程序来说非常理想,其中已经存在一些高级进程管理器。
强烈建议创建单个工作进程脚本和相关容器,并通过 CLI 参数或环境变量控制要运行的工作进程。