2013-06-08 4 views
1

Насколько я знаю, на Python, если вы использовали обычную потоковую передачу в многоядерной среде, GIL обычно попадает в путь и влияет на производительность в (потому что потоки будут пытаться постоянно приобретать и выпускать GIL и делать много контекстных переключений между потоками/процессорами).Как создать приложение python для параллельной работы с несколькими ядрами

Вот почему многие люди начинают использовать зеленые потоки, например. eventlet. Библиотека eventlet позволяет вам иметь несколько зеленых потоков, работающих совместно, и отлично работает в одном процессоре (меньше проблем синхронизации, быстрого нереста/эффективности и т. Д. И т. Д.).

Мой вопрос заключается в том, что если бы у меня была многоядерная ОС и я должен был разработать мое приложение для python, то какая лучшая практика или шаблон дизайна я должен соблюдать, чтобы воспользоваться преимуществами как совместной резьбы (зеленых потоков), так и многоядерных процессоров ,

+2

Мертвые просто: IO связанные == нити, ЦП процесс ==. Кроме того, потоки Python 3.2+ работают намного лучше, чем более ранние версии, например, 2.7 – JBernardo

+0

@JBernardo вы можете дать ответ и объяснить, почему в деталях? также почему вы говорите нить, вы имели в виду потоки или зеленые нити? Некоторые конкретные примеры заслуживают высокой оценки. – Shengjie

+0

Темы, как в библиотеке 'threading'. Я боюсь, что этот вопрос слишком широк для формата SO ... Вы должны добавить некоторые реальные примеры того, что вы хотите сделать. – JBernardo

ответ

1

Очень общий подход, который я впервые увидел в технологическом разговоре о Youtube growth [1], заключается в следующем: выявить и устранить ваши узкие места, выпить, спать и т. Д., Снова продолжить узкие места.

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

[1] https://www.youtube.com/watch?v=ZW5_eEKEC28

+0

можете ли вы предоставить ссылку на youtube как часть вашего ответа? спасибо :) – Shengjie

+0

@Shengjie добро пожаловать – temoto

Смежные вопросы