zoukankan      html  css  js  c++  java
  • python中的进程(一)

    一 : 概述

      进程由三部分组成 : 代码段,数据段,PCB(进程控制块)

      Python中的进程编程依赖于multiprocessing这个包,其中Process类就是提供最基础的功能的类

    二 : 使用Process类创建进程

      使用Process类可以创建新的进程,有两种使用方法:

        1.实例化Process类,参数如下:

          group参数未使用,值始终为None;

          target表示调用对象,即子进程要执行的任务,也就是方法名,不是字符串形式,也不带括号;

          args表示调用对象的位置参数元组,args=(1,2,'egon',);

          kwargs表示调用对象的字典,kwargs={'name':'egon','age':18};

          name为子进程的名称.

        这种方法需要先写好一个方法,作为参数传入Process实例化时候调用的__init__()方法

    def func(i):
    time.sleep(1)
    print('这里是子进程')


    if __name__ == '__main__':
    p = Process(target=func, args=(1,)) # 实例化一个进程对象
    p.start() # 开启一个子进程
    print('这里是父进程')

    # 结果:
    # 这里是父进程
    # 这里是子进程

        2.新写一个Process类的子类,初始化直接调用父类的初始化方法,自己实现一个名为run()的方法,这个方法提供的作用相当于方法1中提前写好的那个方法

    class MyProcess(Process):
        def __init__(self):
            super(MyProcess, self).__init__()
    
        def run(self):
            print('这是以继承类的方式开启的子进程')
    
    
    if __name__ == '__main__':
        p1 = MyProcess()
        p1.start()
    
    # 结果:
    # 这是以继承类的方式开启的子进程

    三 : 进程对象的使用

      创建进程(进程类实例化)之后,需要调用start()方法启动它,我们知道,一个进程启动之后到销毁之前,有三种状态:就绪/阻塞/运行,调用该方法之后,进程就会进入就绪状态,等待操作系统给它分配时间片.

      其他方法介绍:

        run():进程启动时运行的方法,正是它去调用target指定的函数,我们自定义类的类中一定要实现该方法;

        terminate():强制终止进程p,不会进行任何清理操作,如果p创建了子进程,该子进程就成了僵尸进程,使用该方法需要特别小心这种情况。如果p还保存了一个锁那么也将不会被释放,进而导致死锁

        is_alive():如果p仍然运行,返回True

        join([timeout]):主线程等待p终止(强调:是主线程处于等的状态,而p是处于运行的状态)。timeout是可选的超时时间,需要强调的是,p.join只能join住start开启的进程,而不能join住run开启的进程

      run()和start()的纠葛:

        start()方法调用的就是run()方法,但是start()只是让进程处于就绪状态,run()则是让进程进入运行状态,大约相当于start()+join()的效果,所以run()之后也不会再调用join().

      常用属性:

        name : 给进程一个名字;

        pid : 进程的pid

        daemon : 默认为False,当为True时,该进程为守护进程

    四 : 守护进程

      特点 : 1.守护进程随着父进程的结束而结束,普通子进程运行完父进程才会结束,即使父进程代码块已经运行完毕.

           2.守护进程不能再创建子进程.

      创建 : 将实例化出的进程对象的daemon属性设定为True即可,该语句需要在start()语句之前.

  • 相关阅读:
    SQL Server 动态生成分区脚本
    SQL Server数据库服务器高性能设置
    SQL Server 2005 自动化删除表分区设计方案
    SQL Server 自动化管理分区设计方案(图解)
    简单实用SQL脚本Part:sql多行转为一列的合并问题
    简单实用SQL脚本Part9:纵向回填信息
    SQL Server datetime数据类型设计、优化误区
    SQL Server 创建链接服务器
    SQL Server 数据库最小宕机迁移方案
    SQL Server 表分区注意事项
  • 原文地址:https://www.cnblogs.com/DoingBe/p/9513503.html
Copyright © 2011-2022 走看看