Python基础--线程

Python基础–线程

线程的理解
  • 线程是cpu调度(执行)的单位
  • 程序会自动启用一个主线程
  • 子线程是人为创建

线程是在进程的基础上进行运行的,可以说,没有进程就不会产生线程. 在当前进程下的所有线程下,变量是被共享的
线程的执行方式稍微有一点奇怪,在人们看来可以说是同时执行的,但是其实不是的. 线程是有CPU分配资源,随机进行运行的.每个线程都会运行一小段时间,然后运行其他线程.

线程的作用
  • 完成多任务,提高cpu效率
  • 线程的执行是需要CPU的调度完成
多线程的使用
导包 import threading
加入任务 threading.Thread(target=任务名)
开启 xxx.start()

参考实例

import time		 # 导入时间包
import threading # 导入线程包


def dance():
	"""执行跳舞"""
	while True:
		print("跳舞")
		time.sleep(5)


def song():
	"""执行唱歌"""
	while True:
		print("唱歌")
		time.sleep(5)




def main():
	"""多线程开启"""
	# threading.Thread(target=任务名)
	thread_song = threading.Thread(target=song)
	thread_dance = threading.Thread(target=dance)
	# 开启
	thread_song.start()
	thread_dance.start()


if __name__ == '__main__':
    main()
多线程传参两种方式
  • args使用元组
    • 表示已元组的方式传参
    • 传的元素位置需要与函数的形参位置一一对应
import threading
import time


def dance():
	"""执行跳舞"""
	while True:
		print("跳舞")
		time.sleep(1)


def song(name,age):
	"""执行唱歌"""
	while True:
		print("唱歌",name,age)
		time.sleep(1)


def main():
	"""入口函数"""
	# 一边唱歌一边跳舞
	thread_song = threading.Thread(target=song,args=("小白",18))
	
	thread_song.start()


if __name__ == '__main__':
    main()
  • kwargs使用字典
    • 表示以字典的形式传参
    • 因为是无序的,所有key和参数对应,vlaue就是参数
import threading
import time


def dance(name,age):
	"""执行跳舞"""
	while True:
		print("跳舞")
		time.sleep(1)


def song(name,age):
	"""执行唱歌"""
	while True:
		print("唱歌",name,age)
		time.sleep(1)


def main():
	"""入口函数"""
	# 一边唱歌一边跳舞
	thread_song = threading.Thread(target=song,args=("小白",18))
	thread_song.start()
	
	thread_dance = threading.Thread(target=dance,kwargs={"age":18,"name":"小花"})
	thread_dance.start()

if __name__ == '__main__':
    main()
多线程的注意点
  • 主线程会等待子线程结束而结束
  • 守护线程,只要主线程结束守护线程就结束
  • 线程执行是无序的
  • 线程之间共享全局变量(共享就会有资源竞争的问题)
  • 资源竞争解决方案
    • 同步join
      • join函数是将多个线程或者进程按照单线程的方式执行,执行了一个线程之后再去执行另外一个线程
      • 缺点运算速度比较慢
    • 互斥锁
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值