python 多线程multi threading 模块

1、什么是多线程?

多线程是加速程序计算的有效形式。

2、添加线程thread

import threading	# 导入模块

1)、几个基本函数

获取已经激活的线程数:print(threading.active_count())
查看所有线程信息:print(threading.enumerate())
查看现在正在运行的线程:print(threading.current_thread())

2)、添加线程

import threading

def thread_job():
    print('this is an added thread ,number is %s !'%threading.current_thread())

def main():
    added_thread=threading.Thread(target=thread_job)	# 定义线程
    added_thread.start()	# 让线程开始工作

if __name__=='__main__':
    main()

3、join 功能

使用join功能对控制多个线程的执行顺序非常关键。
一般为了规避不必要的麻烦,推荐下面这种1221v型排布:

added_thread1.start()
	added_thread1.start()
    added_thread2.start()
    
    added_thread2.join()
    added_thread1.join()

    print('all done!')
    
结果为:
'''
T1 start
T2 start
T2 finish
T1 finish
all done
'''

4、储存进程结果Queue—非常重要

多线程调用的函数不能用return返回值,所以要用到队列Queue,将值用队列形式提取出来。这里感觉都很重要,自己也不知到该写什么啦,建议还是亲自看一下莫烦python的视频学习一下吧!
关键代码:

q=Queue()
q.put(l)
q.get()

代码附上:

def job(l,q):   # l为一个列表,q为一个队列
    for i in range(len(l)):
        l[i]=l[i]**2
    q.put(l)    # 多线程调用的函数不能用return返回值


def multithreading():
    q=Queue()   # q中存放返回值,代替return的返回值
    threads=[]
    data=[[1,1,1],[2,2,2],[3,3,3],[4,4,4]]

    for i in range(4):     # 定义4个线程
        t=threading.Thread(target=job,args=(data[i],q))
        t.start()
        threads.append(t)   # 把每个线程append到线程列表中

    for thread in threads:
        thread.join()

    results=[]
    for _ in range(4):
        results.append(q.get())
    print(results)


if __name__=='__main__':
    multithreading()

5、GIL不一定有效率

python完全支持多线程编程,但是解释器被一个全局解释器锁(GIL)保护着.它使得在任何时候都只有一个Python线程执行.GIL最大的问题就是Python的多线程程序并不能利用多核CPU的优势.
从运行的结果可以看出,正常计算所花费的时间不一定就是多线程花费时间的4倍,这就是中间有GIL在中间捣鼓.

6、线程锁Lock()

在不同线程使用同一共享内存时,为了确保线程之间互不影响,便采用lock的方法,确保当前线程在执行的时候,内存不会被其他线程访问.
使用方法:
首先先导入线程锁:lock=threading.Lock()
在每个线程执行运算修改共享内存之前,将共享内存上锁:lock.acquire()
执行运算结束之后,将锁打开:lock.releas()

总结

到此,莫烦Python的多线程内容就讲解结束了!
感谢大家的观看!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值