作为小白的我,总是被多进程和多线程弄晕,当然,很多面试官也很喜欢问此类问题,针对这个问题,特意制作这个沙雕漫画来帮助小白的理解,同时加深对进程和线程的印象。 看完了以上的漫画,想必大家对进程线程有了一定的了解,那么接下来,我就举一个生活中常见的例子,来帮助小白的理解。 运行结果: 运行结果: 运行结果:
1.单核cpu
假设只有一个线程,来看看要用多久。#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : xueli # @Software: win10 Tensorflow1.13.1 python3.6.3 import time import datetime def func1(work): print('%s,我现在要——>%s' %(datetime.datetime.now(),work)) time.sleep(4) def func2(work): print('%s,我现在要——>%s' %(datetime.datetime.now(),work)) time.sleep(3) def func3(work): print('%s,我现在要——>%s' %(datetime.datetime.now(),work)) time.sleep(4) def func4(work): print('%s,我现在要——>%s' %(datetime.datetime.now(),work)) time.sleep(1) if __name__ == '__main__': start = time.time() func1(u'煮饭') func2(u'炒菜') func3(u'洗衣服') func4(u'拖地') print("总时:" ,time.time() - start)
接下来引入多线程:import threading import time import datetime import os def func1(work): print('当前进程: {}'.format(os.getpid())) print('%s,我现在要——>%s' %(datetime.datetime.now(),work)) time.sleep(4) print('%s,我已经完成了——>%s' % (datetime.datetime.now(), work)) def func2(work): print('当前进程: {}'.format(os.getpid())) print('%s,我现在要——>%s' %(datetime.datetime.now(),work)) time.sleep(3) print('%s,我已经完成了——>%s' % (datetime.datetime.now(), work)) def func3(work): print('当前进程: {}'.format(os.getpid())) print('%s,我现在要——>%s' %(datetime.datetime.now(),work)) time.sleep(4) print('%s,我已经完成了——>%s' % (datetime.datetime.now(), work)) def func4(work): print('当前进程: {}'.format(os.getpid())) print('%s,我现在要——>%s' %(datetime.datetime.now(),work)) time.sleep(1) print('%s,我已经完成了——>%s' % (datetime.datetime.now(), work)) if __name__ == '__main__': print('当前主进程: {}'.format(os.getpid())) start = time.time() threads = [] t1 = threading.Thread(target=func1, args=(u'煮饭',)) threads.append(t1) t2 = threading.Thread(target=func2, args=(u'炒菜',)) threads.append(t2) t3 = threading.Thread(target=func3, args=(u'洗衣服',)) threads.append(t3) t4 = threading.Thread(target=func4, args=(u'拖地',)) threads.append(t4) for t in threads: t.start() for t in threads: t.join() print("共计用时{}秒".format((time.time()-start)))
这里只有一个进程。
2.多核CPU(以4核为例)
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2020/4/24 14:15 # @Author : xueli # @File : process.py # @Software: win10 Tensorflow1.13.1 python3.6.3 import time import datetime import os from multiprocessing import Process def func1(work): print('当前进程: {}'.format(os.getpid())) print('%s,我现在要——>%s' %(datetime.datetime.now(),work)) time.sleep(4) print('%s,我已经完成了——>%s' % (datetime.datetime.now(), work)) def func2(work): print('当前进程: {}'.format(os.getpid())) print('%s,我现在要——>%s' %(datetime.datetime.now(),work)) time.sleep(3) print('%s,我已经完成了——>%s' % (datetime.datetime.now(), work)) def func3(work): print('当前进程: {}'.format(os.getpid())) print('%s,我现在要——>%s' %(datetime.datetime.now(),work)) time.sleep(4) print('%s,我已经完成了——>%s' % (datetime.datetime.now(), work)) def func4(work): print('当前进程: {}'.format(os.getpid())) print('%s,我现在要——>%s' %(datetime.datetime.now(),work)) time.sleep(1) print('%s,我已经完成了——>%s' % (datetime.datetime.now(), work)) if __name__ == '__main__': print('当前主进程: {}'.format(os.getpid())) start = time.time() process = [] p1 = Process(target=func1, args=(u'煮饭',)) process.append(p1) p2 = Process(target=func2, args=(u'炒菜',)) process.append(p2) p3 = Process(target=func3, args=(u'洗衣服',)) process.append(p3) p4 = Process(target=func4, args=(u'拖地',)) process.append(p4) for p in process: p.start() for p in process: p.join() print("共计用时{}秒".format((time.time()-start)))
这里创建了4个进程。由此可知,在这项工作中,单线程16秒,多线程4秒,多进程5.7秒。注意:进程与进程的切换要耗资源,所以平时工作中进程数不能开太大,进程数取决于CPU的核数。如有问题,欢迎大佬给予批评指点。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算