前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 3 多线程

Python 3 多线程

作者头像
用户6184845
发布2019-10-22 15:18:56
4380
发布2019-10-22 15:18:56
举报

什么是线程


线程是操作系统能够进行运算调度的最小单位

包含在进程中,是进程中的实际运算单位

一个进程中可以并发多个线程,每个线程可执行不同任务

多线程类似于同时执行多个不同程序

优点一:时间长任务放到后台处理

优点二:程序运行速度可能加快

Python 实现多线程


Python提供thread与threading模块

threading比thread模块高级

把一个函数传入并创建Thread实例,调用start方法执行

代码语言:javascript
复制
import threading
#定义多线程执行函数
def test(name,i):
    print(name+'执行:',i)

#创建t1\t2两个线程
t1 = threading.Thread(target = test,args=('线程一',100))
t2 = threading.Thread(target = test,args=('线程二',200))
#执行线程
t1.start()
t2.start()
#线程同步
t1.join()
t2.join()

线程池运用


线程与进程一样可通过线程池来管理多线程

ThreadPoolExecutor实现线程池

代码语言:javascript
复制
from concurrent.futures import ThreadPoolExecutor

#定义多线程执行函数
def test(name,i):
    print('线程'+name+'执行:',i)

#创建多个线程
thre_name = []  #定义线程池变量
th_pool = ThreadPoolExecutor(max_workers = 2)    #创建线程池,上限5个
for i in range(10):
    thre_name.append(i)
    thre_name[i] = th_pool.submit(test,(thre_name[i],i))
for i in range(0,len(thre_name)):
    print('线程%s是否完成'%i,thre_name[i].done())

done()方法用于判断线程是否执行完成

全局锁(GIL)


GIL产生互斥锁来限制线程对共享资源访问

GIL决定多线程不能调用多个CPU内核

CPU密集型操作时不推荐使用多线程,建议使用多进程

IO密集型操作,多线程可明显提高效率

多线程与‘爬虫’可完美结合

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网优小兵玩Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档