python起进程函数 python 进程pid

python中的进程-实战部分 如果想了解进程 可以先看一下这一篇 python中的进程-理论部分
python中的多线程无法利用多核优势python起进程函数,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程 。Python提供了multiprocessing 。
multiprocessing模块用来开启子进程 , 并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似 。
multiprocessing模块的功能众多:支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、Lock等组件 。
需要再次强调的一点是:与线程不同,进程没有任何共享状态,进程修改的数据,改动仅限于该进程内 。
创建进程的类:
参数介绍:
group参数未使用,值始终为None
target表示调用对象 , 即子进程要执行的任务
args表示调用对象的位置参数元组,args=(1,2,'tiga',)
kwargs表示调用对象的字典,kwargs={'name':'tiga','age':18}
name为子进程的名称
方法介绍:
p.start():启动进程 , 并调用该子进程中的p.run()
p.run():进程启动时运行的方法,正是它去调用target指定的函数,我们自定义类的类中一定要实现该方法
p.terminate():强制终止进程p,不会进行任何清理操作,如果p创建了子进程,该子进程就成了僵尸进程 , 使用该方法需要特别小心这种情况 。如果p还保存了一个锁那么也将不会被释放 , 进而导致死锁
p.is_alive():如果p仍然运行,返回True
p.join([timeout]):主线程等待p终止(强调:是主线程处于等的状态 , 而p是处于运行的状态) 。timeout是可选的超时时间 , 需要强调的是,p.join只能join住start开启的进程,而不能join住run开启的进程
属性介绍:
注意:在windows中Process()必须放到# if __name__ == '__main__':下
创建并开启子进程的两种方式
方法一:
方法二:
有了join,程序不就是串行了吗python起进程函数?python起进程函数??
terminate与is_alive
name与pid
python 多进程 基于官方文档:
日乐购,刚才看到的一个博客,写的都不太对 , 还是基于官方的比较稳妥
我就是喜欢抄官方的,哈哈
通常我们使用Process实例化一个进程,并调用 python起进程函数他的 start() 方法启动它 。
这种方法和 Thread 是一样的 。
上图中,我写了p.join() 所以主进程是 等待 子进程执行完后 , 才执行print("运行结束")
否则就是反过来了(这个不一定,看你的语句了,顺序其实是随机的)例如:
主进加个 sleep
所以不加join() ,其实子进程和主进程是各干各的 , 谁也不等谁 。都执行完后 , 文件运行就结束了
上面我们用了 os.getpid()和 os.getppid() 获取 当前进程,和父进程的id
下面就讲一下,这两个函数的用法:
os.getpid()
返回当前进程的id
os.getppid()
返回父进程的id 。父进程退出后,unix 返回初始化进程(1)中的一个
windows返回相同的id (可能被其他进程使用了)
这也就解释了,为啥我上面 的程序运行多次,第一次打印的parentid都是 14212 了 。
而子进程的父级 process id 是调用他的那个进程的 id : 1940
视频笔记:
多进程:使用大致方法:
参考: 进程通信(pipe和queue)
pool.map(函数可以有return也可以共享内存或queue) 结果直接是个列表
poll.apply_async()(同map,只不过是一个进程,返回结果用 xx.get() 获得)

推荐阅读