600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Python多线程threading和多进程multiprocessing的区别及代码实现

Python多线程threading和多进程multiprocessing的区别及代码实现

时间:2020-02-06 07:11:49

相关推荐

Python多线程threading和多进程multiprocessing的区别及代码实现

1. 多线程threading

import timefrom threading import Threaddef thread_read(data):while True:print('read data:', data)def thread_write(data):i = 1while True:data[0] = idata[1] = i + 1print('write data:', data)i += 1if __name__ == '__main__':data = [0, 0]t = Thread(target=thread_read, args=(data,))t.setDaemon(True)t.start()t2 = Thread(target=thread_write, args=(data,))t2.setDaemon(True)t2.start()while True:print('main')

资源监视器及部分命令行窗口运行结果如下图,只有一个Python进程。

2. 多进程multiprocessing(共享数据失败)

from multiprocessing import Processimport timedef process_write(data):i = 1while True:data[0] = idata[1] = i + 1print('write data: ', data)i += 1def process_read(data):while True:print('read data: ', data)if __name__=='__main__':data = [0, 0]p1 = Process(target=process_write, args=(data,))p2 = Process(target=process_read, args=(data,))p1.start()p2.start()while True:print('main process')

资源监视器及部分命令行窗口运行结果如下图,有三个Python进程。

3. threading和multiprocessing的区别

threading是开启线程,只有一个进程,并且线程间共享数据正常,但是在多核CPU电脑运行时并没有真正并行。

multiprocessing是开启进程,多个进程,并且共享数据失败(进程共享数据),而且在多核CPU电脑上能实现真正的并行运行。

我们添加点代码,让多线程和多进程都执行1秒钟,查看写进程的数据达到了多少,代码和最终运行结果如下。

这边可以看到6932和3791,并不是完全差3倍。主要有两方面,一方面是我们主线程和主进程1秒结束,并不是真正的1秒,多线程下主线程会被抢资源,所以等到它抢到资源时,时间不一定是完全1秒钟。另一方面,即使是多进程,如果被分配在同一颗CPU上,那么还是存在资源竞争的。只是整体比多线程更接近并行运行。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。