он перестанет быть блокирующим?
Нет
Сопрограммы в луа это паттерн, а не механизм над вытесняющей многопоточностью, другими словами сопрограммами вы можете экзотично организовать поток выполнения, но без параллелизма.
Если ты обернешь специально написанный для корутин неблокирующий io.popen вида function asyncpopen(...) local hndlr = asyncio_popen(...) local co, isMain = coroutine.running() if not co or (co and isMain) then return hndlr:fetch() -- типо блокирует если вне корутины end while not hndlr:isDone() do coroutine.yield() end -- типо мгновенно вернет потому что -- закончил работу return hndlr:fetch() end в корутину, то у тебя все получится.
Кстати, когда я начал активно работать с корутинами, я теперь довольно часто пишу "корутин-френдли" код на блокирующей ерунде, очень удобно.
Обсуждают сегодня