может ли python работать на нескольких ядрах?

Вопрос: Из-за использования python для «GIL» – это python, способный одновременно работать с отдельными потоками?


Информация:

Прочитав это, я довольно не уверен в том, способен ли python использовать многоядерный процессор. Как и в случае с python, очень странно думать, что у него не будет таких мощных способностей. Поэтому, чувствуя себя не уверенным, я решил спросить здесь. Если я напишу программу с несколькими потоками, будет ли она работать одновременно на нескольких ядрах?

5 Solutions collect form web for “может ли python работать на нескольких ядрах?”

Ответ: «Да, но …»

Но cPython не может, когда вы используете регулярные потоки для параллелизма.

Вы можете использовать что-то вроде multiprocessing , celery или mpi4py чтобы разделить параллельную работу на другой процесс;

Или вы можете использовать что-то вроде Jython или IronPython для использования альтернативного интерпретатора, который не имеет GIL.

Более мягкое решение – использовать библиотеки, которые не работают с GIL для тяжелых задач CPU, например, numpy может выполнять тяжелый подъем, не сохраняя GIL, поэтому могут продолжаться другие потоки python. Таким образом, вы также можете использовать библиотеку ctypes .

Если вы не выполняете работу с ЦП, вы можете полностью игнорировать проблему GIL (вид), поскольку python не будет использовать GIL, пока он ждет ввода-вывода.

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

Обходным путем является multiprocessing модуль http://www.python.org/dev/peps/pep-0371/, который был разработан для этой цели.

Документация: http://docs.python.org/library/multiprocessing.html

(Или используйте параллельный язык.)

CPython (классическая и распространенная реализация Python) не может иметь более одного потока, исполняющего байт-код Python одновременно. Это означает, что программы, связанные с вычислением, будут использовать только одно ядро. Операции ввода-вывода и вычисления, происходящие внутри C-расширений (например, numpy), могут работать одновременно.

Другая реализация Python (например, Jython или PyPy) может вести себя по-разному, я менее отчетливо понимаю их детали.

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

Темы разделяют процесс, и процесс выполняется на ядре, но вы можете использовать многопроцессорный модуль python для вызова ваших функций в отдельных процессах и использования других ядер, или вы можете использовать модуль подпроцесса, который также может запускать ваш код и код не-питона ,

пример кода, берущий все 4 ядра на моем ubuntu 14.04, python 2.7 64 бит.

 import time import threading def t(): with open('/dev/urandom') as f: for x in xrange(100): f.read(4 * 65535) if __name__ == '__main__': start_time = time.time() t() t() t() t() print "Sequential run time: %.2f seconds" % (time.time() - start_time) start_time = time.time() t1 = threading.Thread(target=t) t2 = threading.Thread(target=t) t3 = threading.Thread(target=t) t4 = threading.Thread(target=t) t1.start() t2.start() t3.start() t4.start() t1.join() t2.join() t3.join() t4.join() print "Parallel run time: %.2f seconds" % (time.time() - start_time) 

результат:

 $ python 1.py Sequential run time: 3.69 seconds Parallel run time: 4.82 seconds 
  • Расширяет ли список Python (например, l + = ), гарантированный потокобезопасностью?
  • многопоточность jython
  • Реализация барьера в Python2.7
  • Как создать файл на python без перезаписи существующего файла
  • Сериализация Sqlite3 в Python
  • Как реализовать функции паузы (и более)?
  • Python 2.5 - многопоточный цикл
  • Python и threading: почему «большой» объект списка теряется при обращении от другого метода?
  • Есть ли безопасный способ создания подпроцесса из потока в python?
  • Twisted LoopingCall с функцией блокировки
  • Предоставление моему приложению Python веб-интерфейса для его мониторинга, используя Tornado
  • Python - лучший язык программирования в мире.