python 进程的使用

一些概念

并行 : 两个进程在同一时间点发生
并发 : 两个进程在同一时间间隔内运行
同步 : 某一个任务的执行必须依赖于另一个任务的返回结果
异步 : 某一个任务的执行,不需要依赖于另一个任务的返回,只需要告诉另一个任务一声
阻塞 : 程序因为类似于IO等待、等待事件等导致无法继续执行。
非阻塞:程序遇到类似于IO操作时,不再阻塞等待,如果没有及时的处理IO,就报错或者跳过等其他操作

第一种使用进程

  1. is_alive, 判断进程是否活着
  2. terminate 杀死进程
from multiprocessing import Process
import  time
import os


# 第一种开启进程
def func1(i):
    time.sleep(1)
    print('这里是儿子进程,儿子自己的pid是%s,儿子的父进程的pid是%s'%(os.getpid(),os.getppid()))


if __name__ == '__main__':
    p = Process(target=func1,args=(1,))
    p.start()

    print('这里是儿子进程,儿子自己的pid是%s,儿子的父进程的pid是%s'%(os.getpid(),os.getppid()))

第二种的使用

# 第二种的使用
class MyProcess(Process):

    def __init__(self,name):
        super(MyProcess,self).__init__()
        self.name = name
    def run(self):
        print('这是以继承类的方式开启的子进程%d,他的名字是%s'% (os.getpid(),self.name))


if __name__ == '__main__':
    p1= MyProcess('WURI')
    p1.start()

守护进程的用法:p.daemon = True 和 p.join()

1.将p进程设置为守护进程,必须要在start之前设置
2.守护进程:不允许开启子进程
3.守护进程:跟随着父进程的代码执行结束,守护进程就结束

  1. 开启一个正常的子进程,父进程会等待子进程结束后,父进程也就是程序才结束
  2. p.join()# 是让主进程等待子进程执行完。 现象:主进程执行到这句话,主进程阻塞住,等待子进程执行
    如何把父进程和子进程之间的关系变为同步或者异步?
  3. 父进程执行join,就会变成同步,不执行join,父进程和子进程就是异步的关系
  4. join必须放在start()后边

def func():
    for i in range(10):
        time.sleep(1)
        print('打印次:%d 当前时间是%s'% (i, time.strftime('%H:%M:%S')))

if __name__ == '__main__':

    p = Process(target=func)

    p.daemon = True
    p.name = 'lou'
    p.start()
    # 是让主进程等待子进程执行完。
    #  现象:主进程执行到这句话,主进程阻塞住,等待子进程执行
    # p.join() 

    time.sleep(5)
    print('进程名字:%',p.name)
    print('是否是守护进程:%d',p.daemon)
    print('我是主进程')

你可能感兴趣的:(python 进程的使用)