作者 邓超

1

... ... @@ -18,16 +18,24 @@ function start(){
$pm = new Process\Manager();
// 启动一个进程来管理定时
// $pm->add(function (Process\Pool $pool, int $workerId){
// _echo("定时进程({$workerId})启动成功");
//
//
// // 进行阻塞,否则定时器无法运行
// while (true){
// co::sleep(9999);
// }
//
// },true);
$pm->add(function (Process\Pool $pool, int $workerId){
_echo("定时进程({$workerId})启动成功");
\Swoole\Timer::tick(1000,function() use(&$pool){
if(redis()->getOriginData('email_sync_stop_num') >= WORKER_NUM+2 ){
$pool->shutdown();
}
});
// 进行阻塞,否则定时器无法运行
while (true){
co::sleep(9999);
}
},true);
// 协程配置
... ... @@ -44,6 +52,11 @@ function start(){
// 循环阻塞
while (true){
if(redis()->get(SYNC_RUNNING_REDIS_KEY)=='stop'){
break;
}
// 是否到了协程配置的数量上限
if($start_num < COROUTINE_MAX_NUM){
// 需要同步的id
... ... @@ -99,8 +112,20 @@ function start(){
}
// 验证是否全部进程退出了
while (true){
if(!$start_num){
redis()->incr('email_sync_stop_num');
break;
}
co::sleep(0.5);
}
while (true){
co::sleep(99);
}
},true);
// 启动一个同步内容的进程
$pm->add(function (Process\Pool $pool, int $worker_id){
_echo("业务进程({$worker_id})启动成功,body");
... ... @@ -109,8 +134,11 @@ function start(){
// 循环阻塞
while (true){
if(redis()->get(SYNC_RUNNING_REDIS_KEY)=='stop'){
break;
}
// 是否到了协程配置的数量上限
if($start_num < 50){
if($start_num < 500){
// 需要同步的id
$id = redis()->lPop('sync_email_body');
... ... @@ -162,6 +190,17 @@ function start(){
}
// 验证是否全部进程退出了
while (true){
if(!$start_num){
redis()->incr('email_sync_stop_num');
break;
}
co::sleep(0.5);
}
while (true){
co::sleep(99);
}
},true);
... ...
... ... @@ -72,6 +72,17 @@ class RedisPool {
}
/**
* 获取原数据
* @param $key
* @return false|mixed|string
* @author:dc
* @time 2023/4/12 16:51
*/
public function getOriginData($key){
return $this->getClient()->get($key);
}
/**
* @param $key
* @param $val
* @param null $ttl
... ...