В каких случаях использовать мульпроцессинг/мультипоточность/asyncio?

День добрый. Никак не могу понять: в каких случаях стоит и выгоднее использовать мульпроцессинг/мультипоточность/asyncio и в чем их плюсы и минусы? И каким способом процессы и потоки обходят GIL?
  • Вопрос задан
  • 692 просмотра
Решения вопроса 1
bogolt
@bogolt
Не питонист, но попробую ответить. Сам GIL живет внутри процесса, поэтому создание нескольких копий одного процесса вполне возможно. GIL разных процессов никак не будут пересекаться. Разные процессы могут обрабатывать разные данные. У разных процессов нет общей памяти ( если мы не учитываем shared-memory ). Разные процессы могут делать много полезного - парсить файлы, обрабатывать пользовательские запросы и тд.

С потоками все иначе. Так все потоки принадлежат одному процессу, и у них общая память GIL уже обойти нельзя. Но есть нюанс. Если поток выполняет некую системную функцию, в общем не связанную с самим питоном то таких функций можно выполнять одновременно любое количество. Основные примеры таких функций - чтение запись данных в файлы ( или в сокеты ). То есть можно принимать сразу множество сообщений в разных потоках, но как только мы вывалимся в питон код GIL снова вступит в силу и начнет их выполнять по очереди.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы