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)
客户端:

import socket client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) ip_port = ('127.0.0.1',8080) client.connect(ip_port) while True: msg = input('>>').strip() client.send(msg.encode('utf-8')) data = client.recv(1024) print(client.decode('utf-8')) client.close()
3.2、编写一个简单的文本处理工具,具备三个任务:
一个接收用户输入,
一个将用户输入三内容格式化成大写
一个将格式化的结果存入文件

from threading import Thread import time,json class Mythread(Thread): def __init__(self,msg): super().__init__() self.msg = msg def run(self): time.sleep(1) data = self.msg.upper() print('大写:',data) with open('db.txt', 'a', encoding='utf-8') as f: json.dump(data,f) if __name__ == '__main__': msg = input("请输入英文>>:").strip() p = Mythread(msg) p.start() # start 会自动调用run 方法 print('主')