已经知道了Python的多线程是假的多线程,无论你的电脑几核,在同一时刻只会运行一个线程,但是,多进程是真的多进程啊,假如你的电脑八核的,你开启了8个进程,而每个进程又至少有一个线程,这个时候你就会发现,你的CPU会被高效的利用起来,达到真正的同时处理,但是线程跟进程是不一样的,即便你充分利用了CPU,但是线程中的一些功能进程是办不到的,比如进程间数据不共享等等,具体请戳Python3.x:线程与进程理解
无论如何,进程也是我们以后会经常使用的,让我们来看下进程的使用吧
进程的使用方法跟线程基本相似,如果看过之前的线程,那么这个学起来会相当的简单
from multiprocessing import Process
import threading
# def run2():
# while True:
# pass
# run方法进入死循环
def run():
while True:
# t = threading.Thread(target=run2)
# t.start()
pass
if __name__ == '__main__':
# 开启三个进程
for i in range(3):
p = Process(target=run)
p.start()
让我们看一看效果:
在程序运行的时候我们可以看到,瞬间CPU负载达到了75左右,三个进程,占用了4分之3的CPU,有时候自己也会觉得神奇,就这样几行代码,自己实现了多核共同运行,甚至按自己想要的方式运行
这里语法就不多做解释了,学了进程有很多相似的地方,接下来看一下如何取到我们所开启进程的进程号,以及了解一下进程与进程间关系
import multiprocessing
import os
def info(title):
print(title)
print('父进程id:', os.getppid())
print('我的id:', os.getpid())
# if __name__ == '__main__':
# # for i in range(4):
# p = multiprocessing.Process(target=info, args=('进程', ))
# p.start()
info('111')
接下来仔细看,观察一个有趣的现象:
可以看到,我们还没有开启多进程,但是却存在父进程,而这个父进程是谁呢?我找了找发现是他:Pycharm,看来,是Pycharm创建了这个进程,这里要说一句,在Linux中,每一个进程都是由父进程创建的
接下来试下在主程序中再开一个进程:
import multiprocessing
import os
def info(title):
print(title)
print('父进程id:', os.getppid())
print('我的id:', os.getpid())
if __name__ == '__main__':
info('1')
p = multiprocessing.Process(target=info, args=('2', ))
p.start()
很明显,主进程的父进程是Pycharm,而另外开的一条进程的父进程是主进程,也就是说,这个程序中的进程都是由另一个进程启动的,也许是主进程,也许不是,但是,总有启动它的一个进程
转载请注明出处
python自学技术互助扣扣群:670402334
网友评论