优草派  >   Python

Python支持多线程吗?Python多线程的特点

陈立鑫            来源:优草派

有许多正在初学Python的开发者常常会问Python它这门语言支持多线程吗?那么由于线程是操作系统直接支持的执行单元,高级语言一般都内置有多线程的支持,其实Python它也不例外,而且Python的线程是Posix Thread,而不是模拟出来的线程,所以Python它是最“纯正”的多线程哦。

Python支持多线程吗?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))

输出结果:

Python支持多线程吗?Python多线程的特点

之前的线程数与进程数都为3,现在我们修改为4再看看,如图所示:

Python支持多线程吗?Python多线程的特点

为了更能说明问题,将线程数和进程数继续增加到5,如图所示:

Python支持多线程吗?Python多线程的特点

通过这个实例可以总结出Python是支持多线程的,而且多线程的运用对Python还是非常方便的,但是不要指望能够有效利用多核。如果一定要通过多线程利用多核,那只能通过C扩展来实现,不过这样就失去了Python简单易用的特点。不过,也不用过于担心,Python虽然不能利用多线程实现多核任务,但可以通过多进程实现多核任务。多个Python进程有各自独立的GIL锁,互不影响。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行