有许多正在初学Python的开发者常常会问Python它这门语言支持多线程吗?那么由于线程是操作系统直接支持的执行单元,高级语言一般都内置有多线程的支持,其实Python它也不例外,而且Python的线程是Posix Thread,而不是模拟出来的线程,所以Python它是最“纯正”的多线程哦。
下面让我们看几个Python中分别用单线程、使用多线程、使用多进程的三个方法对最大公约数来进行计算,代码如下:
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor import time def gcd(pair): a, b = pair low = min(a, b) for i in range(low, 0, -1): if a % i == 0 and b % i == 0: return i numbers = [ (1963309, 2265973), (1879675, 2493670), (2030677, 3814172), (1551645, 2229620), (1988912, 4736670), (2198964, 7876293) if __name__ == '__main__': # 不使用多线程和多进程 start = time.time() results = list(map(gcd,numbers)) end = time.time() print('未使用--timestamp:{:.3f} second'.format(end-start)) #使用多线程 start = time.time() pool = ThreadPoolExecutor(max_workers=3) results = list(pool.map(gcd,numbers)) end = time.time() print('使用多线程--timestamp:{:.3f} second'.format(end-start)) #使用多进程 start = time.time() pool = ProcessPoolExecutor(max_workers=3) results = list(pool.map(gcd,numbers)) end = time.time() print('使用多进程程--timestamp:{:.3f} second'.format(end-start))
输出结果:
之前的线程数与进程数都为3,现在我们修改为4再看看,如图所示:
为了更能说明问题,将线程数和进程数继续增加到5,如图所示:
通过这个实例可以总结出Python是支持多线程的,而且多线程的运用对Python还是非常方便的,但是不要指望能够有效利用多核。如果一定要通过多线程利用多核,那只能通过C扩展来实现,不过这样就失去了Python简单易用的特点。不过,也不用过于担心,Python虽然不能利用多线程实现多核任务,但可以通过多进程实现多核任务。多个Python进程有各自独立的GIL锁,互不影响。