PHP工作者(多个进程和/或线程)

时间:2016-07-11 11:41:25

标签: php multithreading pthreads php-7

我正在尝试从Web服务获取统计数据。每个请求的响应时间为1-2秒,我要一次一个地提交数千个ID的请求。由于服务器的响应时间,所有请求总计可达数小时。

我希望尽可能多地并行化请求(服务器可以处理它)。我安装了PHP7和pthreads(仅限CLI),但最大线程数是有限的(Windows PHP CLI中为20),所以我要启动多个进程。

是否有基于PHP的简单框架/库用于多进程/ pthread和作业队列处理?我不需要像symfony或laravel这样的大型框架。

1 个答案:

答案 0 :(得分:0)

您可以考虑使用不需要pthread的php-resque

您必须运行本地Redis服务器(也可能是远程服务器)。根据{{​​3}}

,我相信你可以在Windows上运行Redis

并发请求

您可能还想查看使用this SO之类的内容发送并发请求,您可以找到有关如何使用GuzzleHttp

的示例

来自文档:

您可以使用promises和异步请求同时发送多个请求。

use GuzzleHttp\Client;
use GuzzleHttp\Promise;

$client = new Client(['base_uri' => 'http://httpbin.org/']);

// Initiate each request but do not block
$promises = [
    'image' => $client->getAsync('/image'),
    'png'   => $client->getAsync('/image/png'),
    'jpeg'  => $client->getAsync('/image/jpeg'),
    'webp'  => $client->getAsync('/image/webp')
];

// Wait on all of the requests to complete. Throws a ConnectException
// if any of the requests fail
$results = Promise\unwrap($promises);

// Wait for the requests to complete, even if some of them fail
$results = Promise\settle($promises)->wait();

// You can access each result using the key provided to the unwrap
// function.
echo $results['image']->getHeader('Content-Length');
echo $results['png']->getHeader('Content-Length');