2015-05-20 5 views
0

Yield from coroutine vs yield from taskКак работает asyncio (python)?

Как сообщалось в этом вопросе (второй ответ) «yield from coroutine()», как вызов функции. Я не понимаю, как что-то вроде выхода из, что на самом деле ждет завершения сопрограммы, должно включать параллелизм и неблокирующие операции.

Например, в Голанге вы просто рассуждаете по ключевому слову go.

Когда вы делаете что-то вроде:

func function1(){ 
    go function2() 
... Some channel communication here 
} 

случается, что в идеале начало 2 задачи параллельно и могут взаимодействовать одновременно с использованием каналов.

Эти задачи могут быть легко выполнены параллельно (увеличение числа проков), а логика для меня более прямолинейна.

Пожалуйста, помогите мне, пожалуйста, понять это.

+0

«выход из» обеспечивает точку, в которой асинхронно может активно переходить между задачами, чтобы операции блокировки не мешали запускать другие задачи. Для фактического параллелизма потребуется использование ThreadPoolExecutor или ProcessPoolExecutor из модуля concurrent.futures, который может быть запущен в asyncio с использованием метода run_in_executor(). – shongololo

ответ

2

Я думаю (и, честно говоря, я не эксперт по этой стороне питона), что ответ заключается в том, что сами сопрограммы сами по себе не покупают вам волшебный параллелизм. Корутин - это способ сказать «поработать над этой задачей до тех пор, пока ... а затем не сделайте паузу». После паузы управление потоком может работать над чем-то другим, пока вы не решите запустить его снова.

Где вы можете одновременно работать с несколькими вещами, если ваша сопрограмма в конечном итоге запускает что-то, что можно сделать асинхронно - например, если вы можете развернуть поток в сопрограмме, и поток работает над тем, что так происходит, чтобы освободить GIL (то есть IO). Затем вы можете запустить поток в своей совместной программе, а затем приостановить выполнение выполнения делегирования другим задачам. Когда вы закончите с этими другими задачами, надеюсь, что ваш IO будет завершен, и вы можете продолжить свой веселый путь, не дожидаясь ввода-вывода. Я верю, что это то, что асинчо делает для вас.

Обратите внимание, что если вы ищете хорошее чтение на совместном подпрограмме, стоит проверить this presentation (параллелизм начинается со слайда # 75).

Смежные вопросы