首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
关于不同进程共用链接的疑问
想在Yii 2.0 中 Command 实现开启子进程处理任务 在子进程中会用到Redis 想知道如下代码是否存在`不同进程使用一个链接`的情况 ### 相关代码 ```php class DataCleanController extends Controller { // 实施监测的应用 private const APPS = [ ['pkg' => 'com.xxx.xxx', 'type' => 'xxx',], ]; private const CACHE_KEY_START_POINT_PREFIX = 'data:c:adTransferRelation:startPoint:'; private const CACHE_KEY_RELATION_PREFIX = 'data:c:adTransferRelation:'; private const INTERVAL = 2; private const CACHE_TTL_RELATION = 30; // 进程最大处理次数 private const MAX_HANDLE = 10000; public function actionRun() { $this->stdout("开始处理\n", Console::FG_GREEN); // 父进程 // Redis 链接 \yii::$app->redis->get(); // 进程管理器 $pm = new Manager(); foreach (self::APPS as $app) { $pm->add(function (Pool $pool, int $workerId) use ($app) { // 子进程 /** @var Process $process */ $process = $pool->getProcess($workerId); // Redis 链接 \yii::$app->redis->get(); // 已处理次数 $handleNum = 0; while (self::MAX_HANDLE > $handleNum) { $handleNum++; $this->handle($app); } }, false); } $pm->start(); $this->stdout("处理结束\n", Console::FG_GREEN); } private function handle($app) { $this->stdout("正在处理 {$app['pkg']}" . PHP_EOL); // Redis 链接 \yii::$app->redis->get(); } } ``` 另外,是否可以提供不同进程共用链接导致数据读写异常的示例。
发布于2年前 · 16 次浏览 · 来自
提问
zxyfaxcn
想在Yii 2.0 中 Command 实现开启子进程处理任务 在子进程中会用到Redis 想知道如下代码是否存在`不同进程使用一个链接`的情况 ### 相关代码 ```php class DataCleanController extends Controller { // 实施监测的应用 private const APPS = [ ['pkg' => 'com.xxx.xxx', 'type' => 'xxx',], ]; private const CACHE_KEY_START_POINT_PREFIX = 'data:c:adTransferRelation:startPoint:'; private const CACHE_KEY_RELATION_PREFIX = 'data:c:adTransferRelation:'; private const INTERVAL = 2; private const CACHE_TTL_RELATION = 30; // 进程最大处理次数 private const MAX_HANDLE = 10000; public function actionRun() { $this->stdout("开始处理\n", Console::FG_GREEN); // 父进程 // Redis 链接 \yii::$app->redis->get(); // 进程管理器 $pm = new Manager(); foreach (self::APPS as $app) { $pm->add(function (Pool $pool, int $workerId) use ($app) { // 子进程 /** @var Process $process */ $process = $pool->getProcess($workerId); // Redis 链接 \yii::$app->redis->get(); // 已处理次数 $handleNum = 0; while (self::MAX_HANDLE > $handleNum) { $handleNum++; $this->handle($app); } }, false); } $pm->start(); $this->stdout("处理结束\n", Console::FG_GREEN); } private function handle($app) { $this->stdout("正在处理 {$app['pkg']}" . PHP_EOL); // Redis 链接 \yii::$app->redis->get(); } } ``` 另外,是否可以提供不同进程共用链接导致数据读写异常的示例。
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2022-06-10
Rango
协程模式下需要使用连接池,每个协程或请求必须拥有独立的连接。
赞
1
回复
2022-06-12
zxyfaxcn
回复
Rango
这个应用里面我用到了进程管理功能,开了两个子进程来跑任务 在进程设置上未开启协程,不太确定这样是否会出现共用链接使用问题
赞
0
回复
微信公众号
热门内容
作者其它话题
- swoole 的定时器形态是什么
- Swoole 4.5.1 taskwait 阻塞无响应
- WARNING swServer_master_onTimer (ERROR 9007): No idle worker is available.
- Timer 与 Worker的关系
- 跨worker 检查客户端fd 是否存在
暂无回复的问答
- CodeGalaxy K3s 轻量集群节点之间如何实现负载均衡
- 关于openssl CURL WARNING swSSL_connect: SSL_connect(fd=69) failed. Error: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small[1|394]
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。