zoukankan      html  css  js  c++  java
  • 30 进程process

    进程模块  process

    Process([group [, target [, name [, args [, kwargs]]]]]),由该类实例化得到的对象,表示一个子进程中的任务(尚未启动)
    
    强调:
    1. 需要使用关键字的方式来指定参数
    2. args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号
    
    参数介绍:
    1 group参数未使用,值始终为None
    2 target表示调用对象,即子进程要执行的任务
    3 args表示调用对象的位置参数元组,args=(1,2,'egon',)
    4 kwargs表示调用对象的字典,kwargs={'name':'egon','age':18}
    5 name为子进程的名称

    二.方法:

    1 p.start():启动进程,并调用该子进程中的p.run() 2 p.run():进程启动时运行的方法,正是它去调用target指定的函数,我们自定义类的类中一定要实现该方法 3 p.terminate():强制终止进程p,不会进行任何清理操作,如果p创建了子进程,该子进程就成了僵尸进程,使用该方法需要特别小心这种情况。如果p还保存了一个锁那么也将不会被释放,进而导致死锁 4 p.is_alive():如果p仍然运行,返回True 5 p.join([timeout]):主线程等待p终止(强调:是主线程处于等的状态,而p是处于运行的状态)。timeout是可选的超时时间,需要强调的是,p.join只能join住start开启的进程,而不能join住run开启的进程

    三.属性
    1 p.daemon:默认值为False,如果设为True,代表p为后台运行的守护进程,当p的父进程终止时,p也随之终止,并且设定为True后,p不能创建自己的新进程,必须在p.start()之前设置
    2 p.name:进程的名称
    3 p.pid:进程的pid
    4 p.exitcode:进程在运行时为None、如果为–N,表示被信号N结束(了解即可)
    5 p.authkey:进程的身份验证键,默认是由os.urandom()随机生成的32字符的字符串。这个键的用途是为涉及网络连接的底层进程间通信提供安全性,这类连接只有在具有相同的身份验证键时才能成功(了解即可)

    四.在windows中使用process模块的注意事项
    在Windows操作系统中由于没有fork(linux操作系统中创建进程的机制),在创建子进程的时候会自动 import 启动它的这个文件,而在 import 的时候又执行了整个文件。
    因此如果将process()直接写在文件中就会无限递归创建子进程报错。所以必须把创建子进程的部分使用if __name__ ==‘__main__’ 判断保护起来,import 的时候 ,就不会递归运行了。

    #方式一:
    from multiprocessing import Process
    import time
    def func1():
        time.sleep(2)
        print("我是func1")
    
    def func2():
        time.sleep(3)
        print("我是func2")
    
    if __name__ == '__main__':
        p=Process(target=func1,)
        p.start()
        p.join()
        print("主进程")
    
    
    #方式二
    from multiprocessing import Process
    
    class Myprocess(Process):
        def __init__(self,n):
            super().__init__()
            self.n=n
        #默认方法
        def run(self):
            print(self.n)
    
    
    if __name__ == '__main__':
    
        p=Myprocess(12)
        p.start() #告诉操作系统我已经准备就绪了,等待操作系统开进程
        print("主进程")
    进程的两种创建方式
    #进程之间的空间隔离
    from multiprocessing import Process
    
    class Myprocess(Process):
        def __init__(self,num):
            super().__init__()
            self.num=num
        def run(self):
            print(self.num)
    
    if __name__ == '__main__':
    
        lst=[]
        for i in range(10):
            p = Myprocess(i)  #进程是操作系统开的
            p.start()#准备就绪等待操作系统的开进程,进程的执行是操作系统执行分配的,不知道那个进程先执行
            lst.append(p)
        for pp in lst:
            pp.join()   #等待进程子进程全部结束之后,在执行主进程之后的程序
        print("主进程")
    

      

  • 相关阅读:
    ASP.NET Web API 控制器执行过程(一)
    ASP.NET Web API 控制器创建过程(二)
    ASP.NET Web API 控制器创建过程(一)
    ASP.NET Web API WebHost宿主环境中管道、路由
    ASP.NET Web API Selfhost宿主环境中管道、路由
    ASP.NET Web API 管道模型
    ASP.NET Web API 路由对象介绍
    ASP.NET Web API 开篇示例介绍
    ASP.NET MVC 视图(五)
    ASP.NET MVC 视图(四)
  • 原文地址:https://www.cnblogs.com/knighterrant/p/10038935.html
Copyright © 2011-2022 走看看