Запуск методов на разных ядрах на python - PullRequest
0 голосов
/ 26 ноября 2009

Есть ли простой способ заставить 2 метода, скажем, MethodA () и MethodB () работать в 2 разных ядрах? Я не имею в виду 2 разных темы. Я работаю в Windows, но я хотел бы знать, возможно ли быть независимым от платформы.

редактировать: А как насчет

http://docs.python.org/dev/library/multiprocessing.html а также параллельный питон ?

Ответы [ 4 ]

8 голосов
/ 26 ноября 2009

Вы должны использовать отдельные процессы (из-за часто упоминаемого GIL). многопроцессорный модуль здесь, чтобы помочь.

from multiprocessing import Process
from somewhere import A, B 
if __name__ == '__main__':
    procs = [ Process(target=t) for t in (A,B) ]

    for p in procs: 
        p.start()

    for p in procs: 
        p.join()
0 голосов
/ 26 ноября 2009

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

0 голосов
/ 26 ноября 2009

Из-за глобальной блокировки интерпретатора программы Python всегда запускают только один поток за раз. Если вам нужно настоящее многоядерное программирование на Python, вы можете взглянуть на Jython (который имеет доступ к потокам JVM) или на блестящий без стека , который имеет Go как каналы и тасклеты.

0 голосов
/ 26 ноября 2009

Если вы используете CPython (эталонная реализация), ответ будет NO из-за Global Interpreter Lock . В CPython потоки в основном используются, когда требуется много ввода-вывода (один поток ожидает, другой выполняет вычисления).

...