В чем разница между многопроцессорным программированием и многоядерным программированием? предпочтительно показывают примеры в Python, как написать небольшую программу для мультипрограммирования программирования & многоядерныйПоддерживает ли python многопроцессорное/многоядерное программирование?
ответ
Вы можете прочитать о многопоточности в Python, и нарезание резьб в общем
многопоточности в Python: http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/
Если я понимаю, все правильно, Python имеет что-то, называемое GIL (Global Interpreter Lock), которое фактически делает невозможным использование мультикодов при выполнении нескольких потоков в Python.
См., Например, Guido van Rossum's blog entry по теме. Насколько я знаю, среди «основных» языков только C/C++ и Java имеют эффективную поддержку для мультикодов.
Главное отличие в том, как вы организуете и распространяете данные. Многоядерность обычно имеет более высокую пропускную способность между различными ядрами в процессоре, а многопроцессору требуется задействовать шину между процессором больше.
Python 2.6 получил многопроцессорный процесс (как в процессе работы программы) и больше объектов синхронизации и связи для многопоточного программирования.
Как упоминалось в другом сообщении, Python 2.6 имеет модуль multiprocessing, который может использовать преимущества нескольких ядер/процессоров (он обходит GIL путем прозрачного запуска нескольких процессов). Он предлагает некоторые примитивы, подобные модулю резьбонарезания. Вы найдете некоторые (простые) примеры использования на страницах документации.
Эти ответы удивительны, поскольку процессы не разделяют их адресные пространства, что приводит к существенно иной модели программирования. –
Существует не такая штука, как «многопроцессорное» или «многоядерное» программирование. Различие между «многопроцессорным» и «многоядерным» компьютерами , вероятно, не относится к вам в качестве прикладного программиста; это связано с тонкостями того, как ядра имеют доступ к памяти.
Для того, чтобы использовать многоядерный (или многопроцессорный) компьютер, вам нужна программа, написанная таким образом, что ее можно запускать параллельно, и время выполнения, которое позволит программе фактически выполняться параллельно несколько ядер (и операционная система, хотя любая операционная система, которую вы можете запустить на вашем ПК, сделает это). Это действительно параллельное программирование, хотя существуют различные подходы к параллельному программированию. Те, которые имеют отношение к Python, являются многопроцессорными и многопоточными.
В таких языках, как C, C++, Java и C#, вы можете писать параллельные программы, выполняя несколько потоков. Блокировка глобального интерпретатора во время выполнения CPython и PyPy исключает этот параметр; но только для тех времен. (По моему мнению, многопоточность - это dangerous and tricky, и, как правило, это хорошо, что Python рекомендует вам не рассматривать его как способ получить преимущество в производительности.)
Если вы хотите написать параллельную программу, которая может работать на несколько ядер в Python, у вас есть несколько различных вариантов:
- Написать многопоточную программу, используя
threading
модуль и запустить его во время выполнения IronPython или Jython. - Используйте модуль
processing
(теперь он включен в Python 2.6 в качестве модуляmultiprocessing
), чтобы запустить ваш код в нескольких процессах одновременно. - Используйте модуль
subprocess
для запуска нескольких интерпретаторов python и общения между ними. - Использование Twisted и Ampoule. Это имеет то преимущество, что вы не просто выполняете свой код в разных процессах, но (если вы не разделяете доступ к таким файлам), возможно, и на разных компьютерах.
Независимо от того, какой из этих вариантов вы выберете, вам нужно будет понять, как разделить работу, которую ваша программа делает на куски, которые имеют смысл отделить. Поскольку я не уверен, какие программы вы собираетесь писать, было бы сложно представить полезный пример.
* Нет такого понятия, как «многопроцессорное» или «многоядерное» программирование * - конечно, есть. * Программирование Multicore * - это приложение, использующее несколько ядер. – johndodo
В отличие от приложений, которые используют преимущества нескольких процессоров? – Glyph
Это многопроцессорные приложения ... Не уверен, что я получил точку. Я хотел сказать следующее: большинство людей понимают, что означают термины «многоядерное программирование» и «многопроцессорное программирование».Поэтому вопрос OP можно перевести на «Можно ли писать программы, которые работают на нескольких ядрах/процессорах в python?» Термины, которые вы говорите, недействительны - ну, они есть. Это все, что я хотел добавить. – johndodo
Вы можете писать программы, которые будут использовать несколько процессоров. Вы не можете делать это с помощью потоков из-за блокировки GIL, но вы можете сделать это с помощью другого процесса. Либо:
- Используйте subprocess модуль, и разделить код для выполнения процесса на процессор
- посмотреть на parallelpython модуль
- если вы используете Python> 2.6 взглянуть на multiprocess модуля.
Темы и python будут разделены на несколько ядер, но некоторые из этих ядер (все, кроме одного, если вы не делаете какую-либо магию на C), просто будут ждать GIL. Именно поэтому перед Python 3.2 потоки, связанные с процессором, работают лучше на одноядерных, чем многоядерные. – Chad
Некоторые модули реализованы на C и выпустят GIL. Одним из них является модуль zlib (также используемый модулем gzip). Вы можете использовать несколько ядер для распаковки или сжатия данных с использованием нескольких потоков в python. Другие примеры существуют в стандартной библиотеке (библиотека регулярных выражений) и некоторых других сторонних библиотеках, таких как net-snmp среди других. –
@WillPierce Это выглядит так: «Это можно сделать и очень хорошо, но только если вы не используете Python». Я могу написать модуль C для использования практически на любом языке. Это плюс для C, но просто подчеркивает недостатки Python. – Basic
Помните, однако, что если вы также заботитесь о производительности, использование Python - проблема. Это очень медленно сравнивается, например, с Java или C#, поскольку он все еще интерпретируется и не скомпилирован JIT, а интерпретатор не очень эффективен. Чтобы сделать это быстро, самые популярные рекомендации (от ручной встраивания до написания расширений C) делают вашу программу менее читаемой. Поэтому использование Java или C# может быть намного лучшим выбором, особенно если вам все равно нужно начинать с нуля.
Такие вещи, как Psyco, нет, но у Psyco есть некоторые ошибки и не ускоряет весь код. И все же они не поддерживают многопоточность.
Jython и IronPython поддерживают реальную многопоточность. Однако Jython работает медленнее, чем CPython, в то время как IronPython не быстрее CPython, даже если он работает поверх эффективной виртуальной машины, например, с JIT-компиляцией.
Кто-нибудь хочет объяснить его downvotes? – Blaisorblade
Я не спустил вас вниз. Но нет абсолютно никаких оснований отказаться от Python. 95% кода, который кто-либо пишет, должны быть оптимизированы для удобства чтения, а не для низкоуровневой производительности. Для остальных 5% производительность имеет огромное значение. Я буду придерживаться C для этого, спасибо, Java не будет достаточно быстрым. С помощью правильных инструментов расширение Python C может быть очень читаемым и простым. (И с неправильными инструментами он будет даже менее читабельным, чем без инструментов). Я могу только сделать вывод, что вы никогда не пытались. – maxy
Я не писал расширения Python C, у меня просто достаточно опыта программирования на C, чтобы знать, насколько сложнее, чем Python. Кроме того, расширения C были лишь побочным моментом. – Blaisorblade
Если у вас нет Python 2.6 (что у вас нет, если вы используете Ubuntu Edgy или Intrepid, например), вы можете использовать многопроцессорную версию Google code backported. Он является частью PyPI, что означает, что вы можете легко установить его с помощью EasyInstall (который является частью пакета python-setuptools в Ubuntu).
- 1. Поддерживает ли Arrayfire python многопроцессорное программирование
- 2. Поддерживает ли Restlet реактивное программирование?
- 3. Поддерживает ли PHP асинхронное программирование?
- 4. Поддерживает ли Dart функциональное программирование?
- 5. Поддерживает ли cocoapods программирование MacOSX?
- 6. Поддерживает ли расширение Google Chrome многопоточное программирование?
- 7. Поддерживает ли это взаимное исключение: параллельное программирование?
- 8. Поддерживает ли Calabash Python?
- 9. Поддерживает ли python сгенерированные объекты?
- 10. Поддерживает ли Python символические ссылки?
- 11. Поддерживает ли python WSGI IPv6?
- 12. Поддерживает ли Biopython Python 3.2?
- 13. Поддерживает ли CMAKE Python 3?
- 14. поддерживает ли python BaseHttpServer Html5?
- 15. Поддерживает ли cql python 3?
- 16. Поддерживает ли python перечисленные типы?
- 17. Python: поддерживает ли Gevent 1.0 Python 3.3?
- 18. Поддерживает ли Qt/Gtk + программирование на двух языках одновременно?
- 19. Поддерживает ли linux c/C++ программирование приоритет процесса настройки?
- 20. Программирование Python
- 21. Android-программирование Не поддерживает язык Farsi
- 22. асинхронное программирование в python
- 23. Программирование GPGPU в Python
- 24. Программирование сокетов Python
- 25. Поддерживает ли argparse (python) взаимоисключающие группы аргументов?
- 26. Поддерживает ли pinax-приложения python 3
- 27. Поддерживает ли библиотека cql python Cassandra v2?
- 28. Поддерживает ли python 2.7 интерфейс ActiveX?
- 29. Поддерживает ли Ideone параметры командной строки Python?
- 30. Поддерживает ли потоковый модуль python время выполнения?
C# не является основным? –
Global Interpreter Lock также является только проблемой CPython - Jython и IronPython используют систему потоковой передачи их времени выполнения, соответственно. – VolkA
Однако Jython работает медленнее, чем CPython. IronPython так же быстро. – Blaisorblade