十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇内容介绍了“Python多进程知识点整理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创新互联是一家专业提供眉山企业网站建设,专注与网站制作、网站建设、H5场景定制、小程序制作等业务。10年已为眉山众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。
1.Python 多进程
类型 | CPU密集型操作 | IO密集型操作 | 网络请求密集型操作 |
---|---|---|---|
线性操作 | 94.91824996 | 22.46199995 | 7.3296 |
多线程操作 | 101.1700001 | 24.8605001 | 0.505333265 |
多进程操作 | 53.88999999 | 12.78400004 | 0.504500032 |
通过上表我们可以看到:
多线程在IO密集型的操作下似乎也没有很大的优势(也许IO操作的任务再繁重一些就能体现出优势),在CPU密集型的操作下明显地比单线程线性执行性能更差,但是对于网络请求这种忙等阻塞线程的操作,多线程的优势便非常显著了
多进程无论是在CPU密集型还是IO密集型以及网络请求密集型(经常发生线程阻塞的操作)中,都能体现出性能的优势。不过在类似网络请求密集型的操作上,与多线程相差无几,但却更占用CPU等资源,所以对于这种情况下,我们可以选择多线程来执行
构造方法 | 描述 |
---|---|
target | 执行的方法 |
name | 进程名 |
args | 执行方法的参数 |
实例方法 | 描述 |
is_alive() | 查看进程是否正在运行 |
join() | 阻塞进程 |
start() | 开始进程 |
run() | 被start()调用 |
terminate() | 停止进程 |
属性 | 描述 |
name | 进程名字 |
pid | 进程编号 |
daemon | 守护进程 |
2.例子
2.1 使用多线程运行函数
import multiprocessing as mpdef count():for i in range(1000): print(i)#只有在本程序为主程序的时候运行接下来的代码#每个python模块(python文件,也就是此处的test.py和import_test.py)都包含内置的#变量__name__,当运行模块被执行的时候,__name__等于文件名(包含了后缀.py);如果#import到其他模块中,则__name__等于模块名称(不包含后缀.py)。而“__main__”等于当#前执行文件的名称(包含了后缀.py)。进而当模块被直接执行时,__name__ == 'main'结#果为真。if __name__ == "__main__":#注意这里的target调用的函数是函数名称,不能带();另外Process第一个字母大写p1=mp.Process(target=count) p2=mp.Process(target=count) p1.start() p2.start()
在运行结果中我们可以看到这样的片段:
152
953
153
154
155
156
157
954
158
955
159
956
160
说明在执行第一个循环的进程中,并发开始执行了第二个进程,两个循环进程是同时进行的。
2.2 daemon
import multiprocessing as mpdef count1():for i in range(10): print(i)def count2():for i in range(10): print(i*10)if __name__ == "__main__": p1=mp.Process(target=count1) p2=mp.Process(target=count2)#进程的属性一定要在进程开始前设置p1.daemon=Truep1.start() p2.start() print("Done")
输出的结果为:
Done
0
10
20
30
40
50
60
70
80
90
我们可以看到主程序先运行结束,打印了“Done”,由于count1的进程没有设置保护进程,所以主程序结束后,count1进程也被终止了。但是,count2由于被设置了程度保护,所以count2进程并没有随着主程序的终止而终止。
2.3 lock
lock用来处理共享资源的访问,避免访问冲突
2.4 Semaphore
Semaphore限制访问数量
2.5 Event
Event用来实现进程间的同步通信
2.6 Queue
多进程安全队列,用于实现进程间的数据传递。
2.7 Pipe
2.8 Pool
“Python多进程知识点整理”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!