2015-09-28 5 views
5

Основываясь на моем понимании, потоки не могут выполняться параллельно (выполняются в зависимости от доступности и случайности), и именно по этой причине используется Eventlet.Python Multiprocessing vs Eventlet

Если Eventlets больше для параллелизма, почему мы не можем просто использовать многопроцессорный модуль Python.

Я думал о выполнении нескольких технологических модулей и использовать метод join(), чтобы проверить, завершен ли весь процесс.

Может кто-нибудь объяснить, если мое понимание верное?

+1

Возможно, я ошибаюсь, но из того, что я читал о Eventlet (никогда не слышал об этом раньше, спасибо за подсказку), он выполняет неблокирующее IO, поэтому позволяет выполнить поток выполнения от одного действия к следующему В бассейне. Ну, хотя истинные потоки в CPython не выполняются параллельно из-за GIL, следующий поток может работать, пока один заблокирован при операции ввода-вывода. Поэтому теоретически не должно быть большой разницы (кроме простоты программирования). Может ли кто-нибудь подтвердить или исправить мой ход мысли? – Pynchia

ответ

0

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

Correct

и вот причина Eventlet которые используются.

Не совсем правильно. Библиотека Eventlet используется для упрощения неблокирующего программирования ввода-вывода. Это не фактически добавить параллелизм. Выполнение резьбы по-прежнему ограничено одним потоком за раз в связи с GIL. Но он используется потому, что он значительно упрощает процесс запуска, планирования и управления потоками, привязанными к IO, особенно тем, которые не требуют взаимодействия друг с другом.

Если Eventlets больше параллельности

Как я уже говорил, это не то, что они существуют.

Почему мы не можем просто использовать многопроцессорный модуль Python. Я думал о выполнении нескольких модулей процессов и использовать метод join(), чтобы проверить, завершен ли весь процесс.

Вы, безусловно, можете! И вы получите фактическое параллельное выполнение с этим подходом. Но вы не можете добиться того же ускорения. Библиотека многопроцессорности лучше подходит для параллельных задач, связанных с процессором, потому что это те, которые требуют более частого доступа к интерпретатору. Фактически вы можете увидеть увеличение времени выполнения при многопроцессорной обработке с задачами, привязанными к IO, из-за накладных расходов на выполнение и управление несколькими процессами.


Как и в случае с большинством оптимизации и выполнения временных вопросов, пытаясь как и профилированием является безошибочным способом гарантировать, что вы используете «лучший» вариант для вашего приложения. Хотя вы можете обнаружить, что если вы сначала пишете код для использования Eventlets, попробуйте изменить его, чтобы использовать обычные потоки или многопроцессорность, вам нужно будет написать более шаблонный код только для управления потоками или процессами, а значение Eventlets должно становятся более очевидными.