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()

 

posted @ 2018-10-15 10:14  缘起花渊  阅读(196)  评论(0编辑  收藏  举报