многопроцессорная vs многопоточная vs asyncio в Python 3.4

Я обнаружил, что в Python 3.4 существует несколько разных библиотек для многопроцессорной/потоковой обработки:многопроцессорность vs резьбонарезной vs ввода-вывода.

но я не знаю, какой из них использовать или "рекомендовано". Они делают одно и то же или отличаются? Если да, то какой из них используется для чего? Я хочу написать программу, которая использует скорость на моем компьютере. Но я не знаю, какую библиотеку мне следует изучать.

2 ответов


они предназначены для (несколько) различных целей и/или требований. CPython (типичная, основная реализация Python) все еще имеет глобальная переводчик замок таким образом, многопоточное приложение (стандартный способ реализации параллельной обработки в настоящее время) является неоптимальным. Вот почему multiprocessing мая предпочтительнее threading. Но не все проблемы могут быть эффективно разделены на [почти независимые] штук, поэтому может возникнуть необходимость в тяжелых процессов система связи. Вот почему multiprocessing не может быть предпочтительнее, чем threading в целом.

asyncio (этот метод доступен не только в Python, другие языки и / или фреймворки также имеют его, например импульс.ASIO) - это метод эффективной обработки множества операций ввода-вывода из многих одновременных источников без необходимости параллельного выполнения кода. Так что это просто решение (действительно хорошее!) для конкретной задачи, а не для параллельной обработки в целом.


[Ответ]

TL; DR:


сделать правильный выбор:

мы прошли через наиболее популярные формы параллелизма. Но остается вопрос - когда следует выбрать? Это действительно зависит от вариантов использования. Из моего опыта (и чтения) я склонен следовать этому псевдокоду:

if io_bound:
    if io_very_slow:
        print("Use Asyncio")
    else:
        print("Use Threads")
else:
    print("Multi Processing")
  • CPU Bound => Multi Processing
  • Граница И/О, Быстрый И / О, Ограниченный Номер соединений => многопоточность
  • ввода/вывода, медленное ввода/вывода, многие соединения => ввода-вывода

ссылка