入门级Python多线程学习笔记

2021/12/26 12:37:06

本文主要是介绍入门级Python多线程学习笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

一、多线程模块:threading

二、模块的函数

1创建线程

2.开始线程

3.等待线程

4.线程锁

5.当前存活的线程数量


提示:以下是本篇文章正文内容,下面案例可供参考

一、多线程模块:threading

threading模块是python自带的一个关于多线程的模块。它使用简单,支持创建多个线程,共享数据、锁定线程。

导入模块

import threading

二、模块的函数

1创建线程

格式:

threading.Thread(group=None,target=None,name=None,args=(),kwargs={},daemon=None)

参数group用于线程分组管理,传入线程的组名。不常用。

参数target,用于传入线程将要调用的对象,可以是方法或是类

参数name,用于传入线程的名称。

参数args,用于传入调用对象的参数,传入的必须是一个元组

参数kwargs ,是用于调用目标函数的关键字参数字典

参数daemon ,将显式地设置该线程是否为守护模式。当daemon=True是开启守护模式,主线程结束时,创建的线程直接结束。当daemo保存默认值时,主线程结束时,创建的线程继续运行直到结束。

例子:

import threading
def task(num):	#创建一个方法	
	print("成功创建1个线程")
	print(f"线程的名字是:{t.name}")
	print(f"传入的参数是:{num}")
t=threading.Thread(target=task,name="下载",args="8")	#创建一个线程
t.start()	#开始线程

2.开始线程

函数:

start()

创建好线程后调用,它在一个线程里最多只能被调用一次。

例子:

import threading
def task():	#创建一个方法
	print("成功创建1个线程")
t=threading.Thread(target=task)	#创建一个线程
t.start()	#开始线程

3.等待线程

函数:

join(timeout=None)

当线程调用join()方法后
        如果timeout 参数不存在或者是 None ,会阻塞调用这个方法的线程,直到线程执行结束后,才会执行join()方法后面的代码。
        如果timeout 参数存在而且不是 None 时,它应该是一个用于指定操作超时的以秒为单位的浮点数或者分数。
例子:

import threading
from time import sleep
def task():	#创建一个方法
	print("创建1个线程\n")
	sleep(1)	#延时1秒
	print("线程创建成功")
t=threading.Thread(target=task)	#创建一个线程
t.start()	#开始线程
t.join()		#等待线程直至结束
print("线程已结束")

4.线程锁

函数:

threading.Lock()

        用于锁住某个变量或其他的东西,防止不同的线程同时调用同一个变量。Lock()有两种方法:分别是 acquire() 和 release()。 acquire() 将状态改为锁定 , release() 将其改为非锁定状。

例子:

import time 
import threading as tg
task=100000	#每个线程的任务数量
thread=10   #线程数量
num=0 		#所有线程完成的任务数量
threads=[]	#用于保存所有的线程
lock=tg.Lock()	#一把锁(用于锁住某个变量或其他的东西,防止不同的线程同时调用同一个变量)

def download():	#创建一个方法,供线程调用
	global num
	for i in range(task):
		lock.acquire()	#锁定,防止别的线程读取/修改
		num +=1 	#完成1个任务,总数加一
		lock.release()	#解锁,让别的线程的能够读取/修改

for i in range(thread):
	t=tg.Thread(target=download)	#创建线程	,并传入该线程要调用的方法
	threads.append(t)	#将创建的线程存到列表
	t.start()	#开始线程
print(tg.active_count())
for t in threads:
	t.join()	#等待所有线程执行完成,再执行后面的代码
print(f"应完成的任务数  :{task*thread}")
print(f"实际完成的任务数:{num}")

5.当前存活的线程数量

格式:

threading.active_count()

        返回当前存活的线程的数量。 返回值与 enumerate() 所返回的列表长度一致。
例子:

import threading
from time import sleep
def task():	#创建一个方法
	print("创建1个线程\n")
	sleep(1)	#延时1秒
	print(f"线程{t.name}创建成功")
t=threading.Thread(target=task)	#创建一个线程
t.start()	#开始线程
num=threading.active_count()	#返回当前存活的线数量
print(f"当前存活的线数量=主线程+创建的线程={num}")
t.join()		#等待线程直至结束
print("创建的线程已结束")
num=threading.active_count()	#返回当前存活的线数量
print(f"当前存活的线数量=主线程={num}")

感谢麦叔编程的教程:

Python多线程实战!_哔哩哔哩_bilibili

 



这篇关于入门级Python多线程学习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程