47_并发编程-线程python实现
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了47_并发编程-线程python实现,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3709字,纯文字阅读大概需要6分钟。
内容图文
一、Threading模块 ? ? ? 1、线程的创建 -?方式一1 from threading import Thread 2 import time 3 4 def sayhi(name): 5 time.sleep(2) 6 print('%s say hello' % name) 7 8 if __name__ == '__main__': 9 t = Thread(target=sayhi, args=('太白',)) 10 t.start() # 线程一启动,就很快的执行完毕了 11 print('主线程结束')View Code
2、线程创建 - 方式二
1 import time 2 from threading import Thread 3 4 class Sayhi(Thread): 5 def __init__(self, name): 6 super().__init__() # 需要传参数的话需要调取父类__init__() 7 self.name = name 8 9 def run(self): # 必须重写run方法 10 time.sleep(2) 11 print('%s say hello' % self.name) 12 13 if __name__ == '__main__': 14 t = Sayhi('太白') # 创建对象,传入name 15 t.start() 16 print('主线程')View Code ? ? 3、多线程与多进程 ? ?? ??? ?进程:导入的模块、执行的python文件的文件所在位置、内置的函数、文件里面的这些代码、全局变量等等,然后线程里面有自己的堆栈(类似于一个列表,后进先出)和寄存器,里面存着自己线程的变量,操作(add)等等,占用的空间很小。
1 from threading import Thread 2 from multiprocessing import Process 3 import os 4 5 def work(): 6 print('hello',os.getpid()) 7 8 if __name__ == '__main__': 9 #part1:在主进程下开启多个线程,每个线程都跟主进程的pid一样 10 t1=Thread(target=work) 11 t2=Thread(target=work) 12 t1.start() 13 t2.start() 14 print('主线程/主进程pid',os.getpid()) 15 16 #part2:开多个进程,每个进程都有不同的pid 17 p1=Process(target=work) 18 p2=Process(target=work) 19 p1.start() 20 p2.start() 21 print('主线程/主进程pid',os.getpid())View Code
1 import time 2 from multiprocessing import Process 3 from threading import Thread 4 5 def func(i): 6 print(i**2) 7 8 if __name__ == '__main__': 9 10 # 线程执行 11 t_s_t = time.time() 12 t_lst = [] 13 for i in range(10): 14 t = Thread(target=func, args=(i,)) 15 t.start() 16 t_lst.append(t) 17 [ot.join() for ot in t_lst] 18 t_e_t = time.time() 19 t_dif = t_e_t - t_s_t # 时间差 20 21 # 进程执行 22 p_s_t = time.time() 23 p_lst = [] 24 for i in range(10): 25 p = Process(target=func, args=(i,)) 26 p.start() 27 t_lst.append(p) 28 [op.join() for op in t_lst] 29 p_e_t = time.time() 30 p_dif = p_e_t - p_s_t # 时间差 31 32 print('线程>>>', t_dif) 33 print('进程>>>', p_dif)进程线程效率对比
二、Thread/threading其他方法
1、Thread ?? ?isAlive(): 返回线程是否活动的。 ?? ?etName(): 返回线程名。 ?? ?setName(): 设置线程名。 ? ? join() 2、threading ?? ?threading.currentThread(): 返回当前的线程变量。 ?? ?threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。 ?? ?threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果 三、多线程实现socket多人聊天 ?1 import multiprocessing 2 import threading 3 4 import socket 5 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 6 s.bind(('127.0.0.1',8080)) 7 s.listen(5) 8 9 def action(conn): 10 while True: 11 data=conn.recv(1024) 12 print(data) 13 msg = input('服务端输入:') #在多线程里面可以使用input输入内容,那么就可以实现客户端和服务端的聊天了,多进程不能输入 14 conn.send(bytes(msg,encoding='utf-8')) 15 16 if __name__ == '__main__': 17 18 while True: 19 conn,addr=s.accept() 20 p=threading.Thread(target=action,args=(conn,)) 21 p.start() 22 23 tcp_server.py服务端
1 import socket 2 3 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 4 s.connect(('127.0.0.1',8080)) 5 6 while True: 7 msg=input('>>: ').strip() 8 if not msg:continue 9 10 s.send(msg.encode('utf-8')) 11 data=s.recv(1024) 12 print(data) 13 14 tcp_client.py客户端
内容总结
以上是互联网集市为您收集整理的47_并发编程-线程python实现全部内容,希望文章能够帮你解决47_并发编程-线程python实现所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。