parallel-php / parallel-task
PHP并行任务多线程消息库
1.0.0
2016-10-08 20:24 UTC
Requires
- php: >=5.5.0
- doctrine/instantiator: ~1.0.5
- ramsey/uuid: ~3.5.1
Requires (Dev)
- drealecs/time-benchmark: ~1.0.0
- php-amqplib/php-amqplib: ~2.6.3
- phpunit/phpunit: ^4.8 || ^5.6
- predis/predis: ~1.1.1
- symfony/process: ~3.1.5
Suggests
- ext-redis: Provides redis extension implementation
- php-amqplib/php-amqplib: Provides rabbitmq PHP implementation
- predis/predis: Provides redis PHP implementation
This package is not auto-updated.
Last update: 2024-09-14 20:04:01 UTC
README
库,用于以简单直观的方式在多台计算机上运行并行PHP任务。
它能做什么
- 委托任务以改善应用程序的响应时间。例如,而不是直接发送电子邮件,它可以异步发送。
- 委托不需要立即可见的结果的任务或当前脚本中不需要响应的任务。这里的示例可以从小到大的简单任务,如记录,到可以延迟处理以提高高峰性能的复杂应用程序逻辑。
- 并行处理。可以并行化的算法可以通过在多台不同的机器上启动多个工作进程并汇总所有完成后的结果来从该库中受益。
如何使用它
- 选择队列实现并创建其实例。现有实现:Redis和RabbitMQ。需要更多实现的帮助。
- 使用队列构建工作进程并在命令行环境中启动它。您可以启动多个工作进程。
$workerBuilder = new ExecutorWorkerBuilder() $worker = $workerBuilder->withConsumeQueue($queue)->buildWorker(); $worker->work($type);
- 使用队列构建执行器
$executorBuilder = new ExecutorWorkerBuilder() $executor = $executorBuilder->withPublishQueue($queue)->buildExecutor();
- 通过实现
Task
接口来定义一个任务。 - 提交任务并获取结果
$futureResult = $executor->submit($type, MyTask::class, [$param1, $param2]); //...some other time consuming tasks $result = $futureResult->getResult();
技术上,该库分为三个部分
-
队列模块。处理队列实现细节。从外部来看,它包含两个公共接口
PublishQueue
和ConsumeQueue
以及从其方法中输入/输出实体:InputMessage
、InputMessageIdentifier
和OutputMessage
。putInput
接收一个InputMessage
并将其存储以供处理。
submitInput
接收一个InputMessage
,将其存储以供处理,并返回一个InputMessageIdentifier
以获取结果。getOutput
接收一个InputMessageIdentifier
并返回与它对应的OutputMessage
结果。它会阻塞,直到结果可用。run
接收一个可调用对象。它应该获取一个InputMessage
,用它作为输入运行可调用对象,并将接收到的Output
存储起来。
-
任务模块。使用队列模块添加一个
Task
实现层。从外部来看,它有两个类和两个接口:TaskScheduler
和TaskRunner
,每个都用于为异步运行调度任务以及分别异步运行任务。TaskScheduler
的接口是execute
接收一个新的任务及其输入。它应该用于没有返回类型的方法。
submit
接收一个新的任务及其输入,并返回一个FutureTaskResult
。应该用于有返回类型的方法。
TaskRunner
的接口是run
异步循环中运行任务
runOnce
只异步运行一个任务
-
执行器/工作进程外观。它只是任务模块的包装,以便更容易地进行组合和使用。
有一个构建器可以帮助创建
Executor
或Worker
,允许配置PublishQueue
和ConsumeQueue
的实现,并更改默认实现TaskInputMessageTransformer
、TaskFactory
、TaskResultMessageTransformer
和TaskRunnerSupervisor
。