thread/英 /θred/ 美 /θrɛd/ 线程
1、threading模块介绍
multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍
2、开启线程的两种方式
2.1、方式一
from threading import Thread import time def task(name): print(f"{name} is running") time.sleep(2) print(f"{name} is done") if __name__ == '__main__': p = Thread(target=task,args=('alex',)) p.start() print('主') # 执行程序就开了一个 主进程; 主进程下默认有一个线程 # 该程序 从执行的角度来看是主线程,从资源的角度来看是主进程
2.2、方式二
必须有 run函数
from threading import Thread import time class task(Thread): def __init__(self,name): super().__init__() self.name = name def run(self): # 必须是 -----run函数------- print(f"{self.name} is running") time.sleep(2) print(f"{self.name} is done") if __name__ == '__main__': p = task('alex') p.start() print('主线程')
3、练习题
3.1、基于多线程实现并发套接字通信
服务端:
import socket from threading import Thread def task(conn): data = conn.recv(1024) print(data.decode('utf-8')) conn.send(data.upper()) def server(ip_port): Server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) Server.bind(ip_port) Server.listen(5) while True: conn,addr = Server.accept() p1 = Thread(target=task,args=(conn,)) p1.start() if __name__ == '__main__': ip_port = ('127.0.0.1',8080) server(ip_port)