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