Python 线程与进程
线程
线程是一个任务,通过多个工人去完成。任务是一个任务,但是执行任务的人更多,从而提升任务执行时间。
案例:Python 爬虫,爬取漫画网站,或者是爬取下载电影,任务是下载当前页面的所有电影资源,如果单线程的话,需要挨个下载。伪代码如下:
# 耗时 len(URLs)*单次下载平均时间
for URL in URLs: download(URL) save()
如果多线程的话,耗时就远远小于总耗时时间。
进程
而每个进程,代表一个任务,然后我需要完成相同的这种任务,就开启多个进程。
案例:笔者打算写一个设备的模拟器程序,使用 Modbus TCP 协议开发,一个进程扮演一个 Slave (从机)角色,当设备设置好监听端口后,它会不断的接收发送来自于 Master (主机)的通信请求,并作出响应。
Demo
1. 线程演示程序
# 采用传参方式
import time,threading def demo(n,id): while n >= 0: print('id:',id,'n:',n) n -= 1 time.sleep(1) def main(): t1 = threading.Thread(target=demo,args=(10,1)) t2 = threading.Thread(target=demo,args=(10,2)) t1.start() t2.start() t1.join() t2.join() print('exit') if __name__ == '__main__': main()
2. 构造类
import time,threading class A(threading.Thread): def __init__(self, p1,p2): threading.Thread.__init__(self) self.p1 = p1 self.p2 = p2 def run(self): n,i = self.p1,self.p2 demo(n,i) def demo(n,id): while n >= 0: print('id:',id,'n:',n) n -= 1 time.sleep(1) def main(): t1 = A(10,1) t2 = A(10,2) t1.start() t2.start() t1.join() t2.join() print('exit') if __name__ == '__main__': main()