多进程3
2021/8/29 7:06:47
本文主要是介绍多进程3,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
多进程3
以下代码比较了多线程、多进程和普通顺序执行所耗费的时间:
import multiprocessing as mp import threading import time def job(): a = 0 for i in range(10000): for j in range(10000): a += 1 def by_multiprocess(): process1 = mp.Process(target=job) process2 = mp.Process(target=job) process1.start() process2.start() process1.join() process2.join() def by_multithread(): thread1 = threading.Thread(target=job) thread2 = threading.Thread(target=job) thread1.start() thread2.start() thread1.join() thread2.join() def by_non(): a = 0 for k in range(2): for i in range(10000): for j in range(10000): a += 1 if __name__ == '__main__': time_begin = time.time() by_multiprocess() time_finish = time.time() print('time of multiprocess =', time_finish - time_begin) time_begin = time.time() by_non() time_finish = time.time() print('time of non =', time_finish - time_begin) time_begin = time.time() by_multithread() time_finish = time.time() print('time of multithread =', time_finish - time_begin)
输出结果:
time of multiprocess = 4.632150888442993 time of non = 8.940110445022583 time of multithread = 8.282327890396118
从结果来看,多进程所花费的时间少于另外两种方式,而多线程与普通顺序执行相差不大。
这是因为程序实际运行时,多线程每个时间点只有一个线程在运行,例如thread1和thread2,虽然我们使用start让它们看起来都开始运行,事实上只有thread1在运行,只有当thread1遇到特殊情况如输入输出,需要暂停时,thread2才会开始运行,简而言之,一方停滞,另一方运行。所以有时从多线程展示给我们的输出结果来看,几个线程是同时进行的,而实质上,他们并不是同时进行。多线程只比普通顺序执行节省了停滞的时间。
另一方面多进程是真正的同时进行,因为每个进程具有独立的资源。
进行比较时,上文把循环2*10000*10000次当成一个任务,循环这么多次,就是为了增大计算量,得到比较大的运行时间,便于比较。那为什么不可以直接使用time.sleep命令增加运行时间?
以下代码使用time.sleep命令增加任务运行时间:
import multiprocessing as mp import threading import time def job(): for i in range(10): time.sleep(0.5) def by_multiprocess(): process1 = mp.Process(target=job) process2 = mp.Process(target=job) process1.start() process2.start() process1.join() process2.join() def by_multithread(): thread1 = threading.Thread(target=job) thread2 = threading.Thread(target=job) thread1.start() thread2.start() thread1.join() thread2.join() def by_non(): for k in range(2): for i in range(10): time.sleep(0.5) if __name__ == '__main__': time_begin = time.time() by_multiprocess() time_finish = time.time() print('time of multiprocess =', time_finish - time_begin) time_begin = time.time() by_non() time_finish = time.time() print('time of non =', time_finish - time_begin) time_begin = time.time() by_multithread() time_finish = time.time() print('time of multithread =', time_finish - time_begin)
输出结果:
time of multiprocess = 5.157954931259155 time of non = 10.155349731445312 time of multithread = 5.049519300460815
这次结果中普通顺序执行依旧耗时最长,而多线程花费的时间与多进程相差无几。
这是因为使用time.sleep时,线程是停滞状态,可以切换到另一个线程运行。虽然多进程有并行的优势,多线程在这个环境下用插空的方式减少了大量运行时间,使他们运行时间十分接近。
进程的建立会花费更多时间,所以在程序遇到大量停滞的情况时,或许多线程是更好的选择。
这篇关于多进程3的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)