Re: [问题] 请问 Coroutine & 一般 callback 合作的问题

楼主: HuangJC (吹笛牧童)   2023-02-06 12:28:21
※ 引述《TakiDog (多奇狗)》之铭言:
: 如果程式中出现threading(非Asyncio.run_in_executor)与Async混用
: 我一定会先思考人生,是不是把Python变难了,是不是能从流程改善
: 让被歧视的胶水语言保有最后一点的优雅
一开始我就说,全用 thread 和 全用 Coroutine 我都做得到
但我有非得混用的理由,原因是我用了从网络下载的模组
它有它的 callback, 而 callback 不是我写的,其宣告不带有 async
至于流程 work around 我也做到了,但感觉像 polling
问题在这里不好
: > https://paste.ee/p/kgAsv
: 在同一个process中任意执行 asyncio.run 并不一定是同一个eventLoop
: (不同thread又分别建立了Loop)
这我是知道的
: 在整个process中 asyncio.run 基本上只应该存在一个
我以为,不同 thread 可以各别有 asyncio.run
: 你可以尝试把asyncio.run的部分都改用 loop = get_event_loop()
: 查看loop的id. 或从Debugger查看
:
作者: zerof (猫橘毛发呆雕像)   2023-02-06 13:32:00
GUI 的设计原本就是 event-based, 一定会有 callbacks ;你的问题多到我不知道该从何吐槽,最原始的问题你其实可以左转 cython 学一下 release GIL 的用法就不会卡到 GUI (guizero 底层是用 tk, written in C)
作者: surimodo (好吃棉花糖)   2023-02-06 13:36:00
你python版本用多少
作者: lycantrope (阿宽)   2023-02-06 14:26:00
to_thread就是run_in_executor
作者: poototo (poototo)   2023-02-06 23:30:00
https://paste.ee/p/4EsOS以上连结是使用两种conditionasyncio.condition是基于asyncio.eventasynio.notify跨绪仅可解锁及广播同eventloop的waiterloop向下对task,向上对thread,越级对其他loop的task我不确定可行性,但异步管理弄太复杂我宁愿牺牲效能...
作者: OnoderaHaru (小野寺春)   2023-02-07 01:00:00
https://paste.ee/p/HMP2T#s=0反正最后还是包装成执行绪,直接用执行绪可以用的来沟通https://paste.ee/p/HMP2T#s=1 (执行绪和协程沟通)

Links booklink

Contact Us: admin [ a t ] ucptt.com