2009-11-26 3 views
0

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

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

http://docs.python.org/dev/library/multiprocessing.html и parallel python?

ответ

8

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

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

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

0

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

0

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