Python 板


LINE

描述一下问题: 目前的工作我可以用 multi-thread 做到 https://paste.ee/p/0oAqf 执行结果: 03:16:44: do 1 notify 03:16:45: do 2 do 1 是 thread1 会动的证明,然後用 condition 塞住自己 notify 代表 thread2 利用 condition 通知 thread1 然後 do 2 代表 thread1 果然解锁了,继续执行 如果要改成用 Coroutine 做,我也做得到 https://paste.ee/p/BiPJp 结果是一模一样的(除了时间不一样) 注意到,和 multi-thread 的版本相比 condition 不能在全域的地方产生了 不然会有一个错误讯息,说是不能使用不同 loop 的东西 改用 Coroutine 写也一样,只是 condition 改用 asyncio 的版本 这还难不倒我,也算一想就通 因为它们不是真正的 thread 我知道 python 的 multi-thread 不算真正的 thread 但不影响我讨论,对吧! 附上两支程式,代表这程度我懂 接下来要谈我不懂的 如果我在 task1 里用 thead 版的 condition 把 task1 塞住 那 task2 也会一并塞住! 因为它们其实是同一个 thread 但我若用 asyncio 版本的 condition, 那所谓的塞住就只是交回控制权给 loop 而 loop 会再次分配给 task-2 以达到 Coroutine 的伪多工;完美~ https://paste.ee/p/U7nzP 这是用 thread 版本的 condition 把整个 Coroutine 塞住的例子 执行结果: 03:24:09: do 1 连 notify 都不会印出了,因为 task1 塞住,task2 根本就不会去执行 现在问题在,我的 task-2 若不是 async 宣告 这就是个问题,因为它本来是另一个 thread,打算改写过来但不顺利 这不是什麽简单复杂化,而是我必需把专案的情境模拟成这样 因为有某些部份是引用别人写的 lib, 我不想去全面改写 https://paste.ee/p/kgAsv 执行结果: 03:26:44: do 1 notify do 1 有印出,然後 task1 塞住 thread2 要求解锁其实也做到了 注意到我的 thread2 是呼叫 asnyc 版本的 release() 要求是有要求,但 task1 不照办,根本不会收到 notify!!!! 所以现在是 task-1 & thread-2 之间的 condition 控制问题了 难道我必需全面弃用 thread, 一定要把 thread-2 改写成 task-2? 问题就在 condition.notify_all() 不会有预期的效果 但如果用 multi-thread, 我是轻易能做好这些事的 像这样要怎麽让 condition 正常的运作起来呢? 谢谢 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.204.157.162 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1675573110.A.ED1.html 看到 queue 好像想到解法了 先在 task-2 里建一个 asyncio 版本的 queue 然後 main-thread 可以把想做的事推进去 task-2 自己取出来就可以做了 来试试.. 失败,因为这样 main-thread 也必需改写成 asyncio 版本 目前还是无解!! 需要附上程式吗? ※ 编辑: HuangJC (123.204.157.162 台湾), 02/05/2023 13:49:11
1F:→ lycantrope: 看不太懂你想要问什麽... 02/05 14:34
程式附上了,这个贴程式码的空间真棒,免注册 但好像放久一点就会消失了 XD 我已经找到'堪用'的解法了 就是在 task 中,多加一个 moniter task, 监视用 一秒一次监视状况 如果状况发生,就由 moniter task 代为发送我想要执行的指令 moniter task 是很浪费 cpu 效能的,但我也只写得出这种东西了 https://paste.ee/p/mxM0q 本例中,task2 就是我所谓的 moniter task task 一定要位在同一个 loop,由根部往上长 (至少目前我只写得出这种) 所以我只好先把 task2 写出来 而我所谓的,non asnyc 与 asnyc 之间的介面 就是由 tellTask2 这个介面担任 tellTask2 将被别人写的模组用 call back 改变 而 task2 是 asnyc 版本的,它只好用 polling 的方式去检查 不会即时,而且无法一次对一次 为了避免 polling 太过频繁,我只好加入 sleep 一秒 烂架构,但有解决问题。
2F:→ surimodo: 你进公司前都没碰python吗 02/05 15:36
3F:→ surimodo: 公司也很敢给你什麽不会的弄主架构 02/05 15:36
谦虚的说,我 python 才学两年 但 C 语言我有十年以上的底子 有新东西就学一下看能不能用 这时膨风更惨,会被人说都这麽资深了连这都不会 XD
4F:→ s9041200: epoll? 02/05 16:02
epoll 和我的问题完全是另一个维度了 就算 epoll 能解,我还是想要解目前的问题 我说过,这个问题我已经用不太好的方法解掉了;解得不漂亮 就算 epoll 能解,都不会是我心目中的漂亮 但产品不会有问题
5F:推 Faker0613: Python的thread也不是真的multi啊 会有coroutine 就是 02/05 16:09
6F:→ Faker0613: 要改善cpu 使用效率问题 02/05 16:09
7F:推 Faker0613: Async create_tash勒 我实在不知道你要干嘛 02/05 16:14
我以为你说我打错字,看来你是建议我用 create_task 我有用,不过当 call back 本身不是 asnyc 版本时,问题很难解决
8F:→ TakiDog: 简单复杂化? 看不懂了 建议你重学os 02/05 18:49
请问要我学 os 的哪一章?os 很大,节省一下我的时间 ----------- 文章整个翻新过,附上我测试的程式了
9F:→ lycantrope: 用asyncio.to_thread? 02/06 11:04
10F:→ gomi: 你是不是想用 multi processing? 03/18 23:02
Multi processing 一定能解,我也安排好了 Coroutine 则是觉得也不错,有空就先学习 毕竟一个专案,relay 切换一分钟只要一次,这速度实在是很慢 所以对速度的要求不很高,趁这空档就学学 如果是火烧屁股就不学了,能解问题的就用 ※ 编辑: HuangJC (116.241.233.114 台湾), 03/31/2023 11:54:43
11F:→ firejox: loop.call_soon_threadsafe 04/18 13:00







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP