Поток Python, организация очередей, асинхронность ... Что все это значит? - PullRequest
2 голосов
/ 09 ноября 2010

Я недавно экспериментировал с многопоточностью в Python, и мне было любопытно, когда что использовать.

Например, когда мне следует использовать многопоточность вместо многопроцессорной обработки? Какой будет сценарий, когда я должен использовать асинхронный ввод-вывод, а не многопоточность?

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

  • Что мне следует использовать, если я создавал небольшой HTTP-сервер?
  • Что мне следует использовать, если я создавал небольшой HTTP-клиент?

Это сбивает меня с толку ...

Ответы [ 2 ]

2 голосов
/ 09 ноября 2010

То, о чем вы хотите поговорить, не относится только к python, оно касается многопроцессорности против многопоточности в общем, я думаю, вы можете найти в google множество аргументов с двух сторон: те, которые предпочитают потоки, и другие, которыепредпочитаю многопроцессорность.

Но для python многопоточность ограничена (если вы используете CPython) GIL (Global Interpreter Lock) , поэтому большинство программистов на python предпочитают использовать многопроцессорность надмногопоточность (это рекомендация Гвидо)

Тем не менее, вы правы, что GIL не так плох, как вы изначально думали: вам просто нужно отменить «промывание мозгов», полученное от сторонников Windows и Java, которые, похоже, считают, чтопотоки как единственный способ приблизиться к параллельным действиям, Гвидо ван Россум.

Вы можете найти здесь некоторые больше информация

0 голосов
/ 09 ноября 2010

Многопроцессорная обработка Python имеет смысл, когда у вас есть машина с несколькими ядрами и / или процессорами.Основное различие между использованием потоков и процессов состоит в том, что процессы не разделяют адресное пространство, и поэтому один процесс не может легко получить доступ к данным другого процесса.Вот почему модуль многопроцессорной обработки предоставляет диспетчеры, очереди и тому подобное.

Проблема с многопоточностью - это Pythons Global Interpreter Lock , которая серьезно мешает многопоточным приложениям.

Асинхронный ввод-вывод полезен, когда вы долго выполняете операции ввода-вывода (чтение большого файла, ожидание ответа от сети) и не хотите, чтобы приложение блокировалось.Многие операционные системы предлагают встроенные реализации этого.

Итак, для вашего сервера вы, вероятно, будете использовать многопроцессорность или многопоточность, а для вашего клиента более подходящим является асинхронный ввод-вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...