Python—多线程

2022/1/8 22:09:58

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

多线程优点

  • 更好的资源利用率
  • 简单的程序设计在某些场景下。
  • 更快的响应程序。

线程和进程

1.线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
2.一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线
3.进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,推等)及一些进程级的资源(如打开文件尔和信号等),某进程内的线程在其他进程不可见;
4.调度和切换:线程上下文切换比进程上下文切换要快得多

线程包含模块

threading.currentThread(): 返回当前的线程变量。

threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。

threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。

除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法:

run(): 用以表示线程活动的方法。

start():启动线程活动。

join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。

isAlive(): 返回线程是否活动的。

getName(): 返回线程名。

setName(): 设置线程名

创建线程

 方法一:通过函数来创建线程

import threading
import time

def test(x):
    print(x)
    time.sleep(2)

t1 = threading.Thread(target=test, args=(1, ))     #用t1这个变量来代表一个线程,然后写入一个target来指定目标test(记住不要加括号),如有目标参数的话就引入一个args来指定参数
t2 = threading.Thread(target=test, args=(2, ))
#通过以上方法就创建完成

t1.start()
t2.start()  # 通过这个start函数来调用这个线程 

方法二:通过类来创建多线程 

#  用类来创建多线程
class Mythread(threading.Thread):
    def __init__(self, n):    # 初始化
        super(Mythread, self).__init__()
        self.n = n

    def run(self): #这个函数必须叫run
        print('以类的方式创建多线程', self.n)
        time.sleep(3)

r1 = Mythread(11)
r2 = Mythread(22)   # 至此已经创建了多线程

r1.start()
r2.start()

线程锁 相关创建

def run():
    global x #设置全体变量
    lock.acquire() #操作变量之前进行加锁
    x += 1
    lock.release()  #操作变量之后进行解锁

if __name__ == '__main__':
    x = 0 #定义变量x
    res = [] #定义列表
    lock = threading.Lock() #实例化一个锁对象
   for i in range(100):
        t = threading.Thread(target=run) #创建多线程
        t.start()
        res.append(t) #写入列表
    for t in res:
        t.join()
    print(x)



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


扫一扫关注最新编程教程