kwhat / legume
Legume: 多线程作业管理器和守护进程
Requires
- php: >=7.2
- ext-pcntl: *
- ext-posix: *
- monolog/monolog: ^1.22
- pda/pheanstalk: ~3.0
- pimple/pimple: ^3.0
- ulrichsg/getopt-php: ^3.0
Suggests
- ext-pthreads: Required for thread support
This package is auto-updated.
Last update: 2024-08-26 05:09:18 UTC
README
创建和管理工作池以进行并行处理可能是一项具有挑战性的任务。幸运的是,Legume提供了一种轻量级的php-pthread实现,能够连接到不同的队列。目前仅支持beanstalkd,但未来将添加RabbitMQ支持。Legume作业管理器可以根据队列需求扩展运行工作进程的数量,并且只处理它有处理能力的作业。Legume还支持高并发,开销低。唯一限制因素将是作业本身的负载。
使用方法
此项目有两个使用路径,一个用于运行守护进程,另一个用于创建和排队作业。
守护进程控制
可以通过 ./bin/legumed --help
访问守护进程管理器。
# bin/legumed -H
Usage: bin/legumed <command> [options] [operands]
Options:
-H, --help
-P, --pid <arg>
-v, --verbose <arg>
Commands:
start Start the worker
stop Stop the worker
要启动守护进程,只需调用 ./bin/legumed start
。如果您想启动后台进程,请添加 -D, --daemon
标志。要停止守护进程,运行 ./bin/legumed stop
。如果您没有使用 -D, --daemon
启动守护进程,SIGTERM 或 SIGINT 将终止前台进程。请注意,如果您尝试启动守护进程并收到有关更改池的用户、组或优先级的异常,您需要使用root用户或sudo命令使用权限启动 ./bin/legumed
。
作业配置
可通过 conf/legumed.conf.php 配置可用作业。此文件包含一个关联数组,将作业名称映射到callable 或实现 JobHandlerInterface 的类名字符串。所有有效类都将注册到池中的所有工作进程中,任何无效类都将被忽略。
创建作业
要创建Legume作业,只需在您的类中实现 Legume\Job\HandlerInterface 并将完整命名空间添加到作业配置文件中。当工作进程获取作业时,将调用 __invoke($jobId, $workload)
方法,并传递当前作业ID和排队作业时使用的负载。不会对负载应用任何处理,如 unserialize()
或 json_decode()
。
排队作业负载
Legume不提供任何直接的作业排队功能。相反,应使用用于与目标作业队列通信的库。提供给客户端的作业名称必须与使用带有 start
命令和 --jobs
标志的配置的一个或多个Legume实例匹配。
$client = new Pheanstalk("127.0.0.1");
$seconds = rand(15, 60 * 1);
$client->useTube("ExampleJob")
->put($seconds, Pheanstalk::DEFAULT_PRIORITY, Pheanstalk::DEFAULT_DELAY, Pheanstalk::DEFAULT_TTR);
附加信息
最新源代码和文档可在: https://github.com/kwhat/legume/