1、载歌载舞的练习
import threading from time import sleep,ctime def sing(): for i in range(3): print("正在唱歌...%d"%i) sleep(1) def dance(): for i in range(3): print("正在跳舞...%d"%i) sleep(1) if __name__ == '__main__': print('---开始---:%s'%ctime()) t1 = threading.Thread(target=sing) t2 = threading.Thread(target=dance) t1.start() t2.start() print('---结束---:%s'%ctime())2、查看线程数量【threading.enumerate()】
import threading from time import sleep,ctime def sing(): for i in range(3): print("正在唱歌...%d"%i) sleep(1) def dance(): for i in range(3): print("正在跳舞...%d"%i) sleep(1) if __name__ == '__main__': print('---开始---:%s'%ctime()) t1 = threading.Thread(target=sing) t2 = threading.Thread(target=dance) t1.start() t2.start() while True: length = len(threading.enumerate()) print('当前运行的线程数为:%d'%length) if length<=1: break sleep(0.5)3、线程封装 定义一个新的子类class,只要继承threading.Thread就可以了,然后重写run方法
import threading import time class MyThread(threading.Thread): def run(self): for i in range(3): time.sleep(1) msg = "I'm "+self.name+' @ '+str(i) #name属性中保存的是当前线程的名字 print(msg) if __name__ == '__main__': t = MyThread() t.start()4、多线程共享全局变量的问题
from threading import Thread import time g_num = 0 def work1(): global g_num for i in range(10000000): g_num+=1 print(g_num) def work2(): global g_num for i in range(10000000): g_num-=1 print(g_num) print(g_num) t1 = Thread(target=work1) t2 = Thread(target=work2) t1.start() t2.start() time.sleep(10) print("******************** %d ********************"%g_num)5、多线程上把锁
import threading import time g_num = 0 def work1(): global g_num for i in range(10000000): mutex.acquire() g_num+=1 mutex.release() print(g_num) def work2(): global g_num for i in range(10000000): mutex.acquire() g_num-=1 mutex.release() print(g_num) print(g_num) t1 = threading.Thread(target=work1) t2 = threading.Thread(target=work2) mutex=threading.Lock() t1.start() t2.start() time.sleep(10) print("******************** %d ********************"%g_num)6、多线程UDP聊天器
import socket,threading s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) s.bind(("",6666)) ip=input("请输入对方的ip:") port=int(input("请输入对方的端口号:")) def send(): while True: data=input("请输入要发送的数据:") s.sendto(data.encode("gbk"),(ip,port)) def receive(): while True: data=s.recvfrom(1024) print(data) print("✨"*40+"\n数据来源 : %s:%s\n消息 : %s"%(data[1][0],data[1][1],data[0].decode("gbk"))) threading.Thread(target=receive).start() threading.Thread(target=send).start()