并发编程---开启进程方式---查看进程pid

1.开启进程的两种方式

方式一:

from multiprocessing import Process
import time

def task(name):
    print('%s is running' %name)
    time.sleep(3)
    print('%s is done' %name)

if __name__ == '__main__':
    # Process(target=task,kwargs={'name':'子进程1'})
    p = Process(target=task,args=('子进程',))
    p.start() #仅仅只是给操作系统发送一个型号,给我开启一个子进程

    print('')
#运行这个程序就会产生一个父进程,在父进程运行过程当中,发一个系统调用,开启两个进程

方式二:

from multiprocessing import Process
import time

class MyProcess(Process):
    def __init__(self,name):
        super().__init__() # 为了防止父类中还有,有用的方法,所以要重用一下
        self.name = name

    def run(self): # 函数名必须用run
        print('%s is running' %self.name)
        time.sleep(3)
        print('%s is done' %self.name)

if __name__ == '__main__':
    p = MyProcess('子进程1')
    p.start() # 默认就掉用Process 下面的run方法
    print('')
'''
主进程为什么要等子进程结束在结束呢?
1.所有的子进程都要进入到僵尸状态
2.僵尸进程在父进程一直不死的情况下,会占用系统id,这样系统在执行进程的时候就可能启动不启来
孤儿进程:是子进程没有死,父进程先死了,但是这种进程是无害的。
'''

2.查看进程pid

from multiprocessing import Process
import time,os

def task():
    print('%s is running,parent id is <%s>' %(os.getpid(),os.getppid()))
    time.sleep(3)
    print('%s is done,parent id is <%s>' %(os.getpid(),os.getppid()))

if __name__ == '__main__':
    p = Process(target=task,)
    p.start()

    print('',os.getpid(),os.getppid())


#windows查看进程的id号:tasklist | findstr pycharm(进程)
#linux查看进程的id号:ps aux |grep pycharm(进程)
'''
打印结果
主 1996 13980 #13980是pycharm的id号
12528 is running,parent id is <1996>
12528 is done,parent id is <1996>
'''

 

posted @ 2018-04-19 22:44  Mr。yang  阅读(495)  评论(0编辑  收藏  举报