使用多个核心在Python中进行线程化

时间:2015-04-29 15:19:31

标签: python python-2.7 pthreads gil

据我所知,Python的线程库使用POSIX线程进行线程化,并且它不能在多个核心上运行。那么我们是否有可能使用Open MP为Python线程实现多核线程系统?

2 个答案:

答案 0 :(得分:1)

multiprocessing

  

多处理包提供本地和远程并发,   通过使用有效地侧移Global Interpreter Lock   子进程而不是线程。由于这个原因,多处理   模块允许程序员充分利用多个处理器   给定的机器。它可以在Unix和Windows上运行。

答案 1 :(得分:0)

由于Global Interpreter Lock,CPython(“默认”Python实现)未使用多个核心。所以每个Python语句都必须持有该锁。

但是用C语言编写的模块可能会在耗时的操作之前释放解释器锁。即 numpy 这样做:http://wiki.scipy.org/ParallelProgramming

他们有一个方便的例子:

import numpy as np
import math

def f(x):
    print x
    # This statements hold GIL and cannot be run
    # in two parallel threads 
    y = [1]*10000000
    [math.exp(i) for i in y]

def g(x):
    print x
    # This statements fall to NumPy C code
    # than release GIL and can be multithreaded
    y = np.ones(10000000)
    np.exp(y)

由于OpenMP也是C的工具,我认为这就是你所寻找的。