Какие ресурсы / ссылки доступны для многопоточного программирования на Python? - PullRequest
1 голос
/ 17 февраля 2010

Я оцениваю использование Python для нового проекта и пробежался по некоторым базовым учебникам, но ищу некоторые рекомендации и ресурсы для многопоточной разработки на Python? Как это соотносится с другими языками?

Ответы [ 6 ]

3 голосов
/ 17 февраля 2010

Я бы порекомендовал http://herbsutter.wordpress.com/ (прокрутите вниз до столбцов эффективного параллелизма) для действительно отличного обзора того, что такое многопроцессорность. Да, этот парень говорит о параллелизме в контексте C ++, но большинство из них применимо для любого языка.

Если вы упомянете параллелизм и Python, многие люди могут выкрикнуть «глобальную блокировку интерпретатора» и сказать, что Python не может действительно выполнять параллелизм. Это чепуха из прошлого. Модуль Multiprocess позволяет правильно использовать несколько ядер, с тем преимуществом, что действительно легко разделить определенные виды задач на несколько машин и ядра.

Модуль многопроцессорности появился довольно недавно, и следствием этого является то, что Python все еще имеет большой неизведанный потенциал для выполнения параллелизма. Но суть в том, что в Python есть все необходимые инструменты: от многопроцессорной обработки с передачей сообщений и общей памятью до зеленых потоков

1 голос
/ 17 февраля 2010

Просто чтобы быть уверенным, вы упоминаете многопоточность, а не многопроцессорность.Информация по Многопоточность доступна по этой ссылке.Многопоточность функционально отличается от многопроцессорности.Как упоминалось в других ответах, я рекомендую Multiprocessing , так как он хорошо справляется с использованием нескольких процессоров.Я успешно использовал многопроцессорные модули в нескольких проектах.

0 голосов
/ 18 февраля 2010

Хотя комментарии о том, что multiprocessing является очень полезным новым пакетом, который позволяет легко использовать преимущества многоядерных систем, ваши требования к многопоточному поведению могут не требовать этого, а также могут не зависеть от "ограничений GIL».

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

Поддержка потоков Python очень эффективна, очень проста в работе и очень надежна.Мало того, что мы редко сталкиваемся с проблемами параллелизма более низкого уровня (на некоторых языках вам приходится тратить половину времени на размышления о том, что блокировать и когда блокировать), но и в тех немногих областях, где нам все еще нужночтобы обратить на это внимание, доступная поддержка делает все это относительно простым.

Одним из ключевых моментов является использование класса Queue , поскольку его использование, где это возможно, часто устраняет любые оставшиеся проблемы с критическими разделами,условия гонки и т. д. Примитивные объекты Python (целые числа, числа, списки и т. д.) настолько же поточно-ориентированы, как и хотелось бы, хотя, если вы новичок в многопоточных приложениях, они не защитят вас от вашего собственного невежества.Для опытных программистов в этой области я думаю, что Python очень эффективен и прост в использовании.

0 голосов
/ 17 февраля 2010

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

0 голосов
/ 17 февраля 2010

Вот два хороших урока по Python с примерами кода и хорошей справочной информацией:

http://linuxgazette.net/107/pai.html
http://www.ibm.com/developerworks/aix/library/au-threadingpython/

0 голосов
/ 17 февраля 2010

Модуль многопроцессорный великолепен и избавляет от ограничений GIL .

Конечно, вы также можете использовать модули на основе C с потоками и т. Д.

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