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)

上一篇:python4-信号量和事件


下一篇:Python_03(多线程)