首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
这样的方式无法启动协程吗?
### 问题描述 PHP CLI模式运行的,代码如下 预期的是,把数组ps里的元素传入函数,并发执行fills函数 ### 相关代码 ```php run(function () use ($ps, $f) { foreach ($ps as $p) { $syb = $p['future']; Coroutine::create(function () use ($syb, $f) { var_dump($syb); $s = $f->fills(1, 21, $syb); //这个函数会有网络IO以及数据库操作、redis操作等 }); } }); ``` ###报错信息 PHP Fatal error: Uncaught Swoole\Error: Socket#40 has already been bound to another coroutine#4, reading of the same socket in coroutine#20 at the same time is not allowed in /data/wwwroot/vendor/topthink/think-orm/src/db/PDOConnection.php:761 Stack trace: 0 /data/wwwroot/vendor/topthink/think-orm/src/db/PDOConnection.php(761): PDO->prepare('SHOW FULL COLUM...') 1 /data/wwwroot/vendor/topthink/think-orm/src/db/connector/Mysql.php(66): think\db\PDOConnection->getPDOStatement('SHOW FULL COLUM...') ### 你期待的结果是什么?实际看到的错误信息又是什么? 怎么样才能并发执行 fills函数?
发布于4年前 · 30 次浏览 · 来自
提问
CoinB
### 问题描述 PHP CLI模式运行的,代码如下 预期的是,把数组ps里的元素传入函数,并发执行fills函数 ### 相关代码 ```php run(function () use ($ps, $f) { foreach ($ps as $p) { $syb = $p['future']; Coroutine::create(function () use ($syb, $f) { var_dump($syb); $s = $f->fills(1, 21, $syb); //这个函数会有网络IO以及数据库操作、redis操作等 }); } }); ``` ###报错信息 PHP Fatal error: Uncaught Swoole\Error: Socket#40 has already been bound to another coroutine#4, reading of the same socket in coroutine#20 at the same time is not allowed in /data/wwwroot/vendor/topthink/think-orm/src/db/PDOConnection.php:761 Stack trace: 0 /data/wwwroot/vendor/topthink/think-orm/src/db/PDOConnection.php(761): PDO->prepare('SHOW FULL COLUM...') 1 /data/wwwroot/vendor/topthink/think-orm/src/db/connector/Mysql.php(66): think\db\PDOConnection->getPDOStatement('SHOW FULL COLUM...') ### 你期待的结果是什么?实际看到的错误信息又是什么? 怎么样才能并发执行 fills函数?
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2022-01-04
MARiA
在每个协程里面都需要自己 new 一个新的$f
赞
1
回复
2022-01-05
CoinB
回复
MARiA
不行啊,还是同样的报错。是不是跟数据库链接有关系
赞
0
回复
2022-01-07
MARiA
回复
CoinB
你的$syb也是跟IO操作有关的吗
赞
0
回复
2022-01-21
x
xiaobao
应该是要增加一键协程化。 Swoole\Runtime::enableCoroutine();
赞
0
回复