Python 多进程编程之multiprocessing--Process

时间:2023-11-23 17:08:38

Python 多进程编程之multiprocessing

1,Process

  • 跨平台的进程创建模块(multiprocessing), 支持跨平台:windowx/linux
  • 创建和启动
          创建格式:p=Process(target=函数名)
    ----def __init__(self, group=None, target=None, name=None, args=(), kwargs={}):
    group:分组(基本不用)
    target:表示这个进程实例所调用的对象.
    name:给进程起一个别名
    args:参数,表示调用对象的位置参数元组
    kwargs:表示调用对象的关键字参数字典

    注意:target后是函数名,一定要记住,是函数名,没有括号
    带括号的话,子进程就没有创建,直接在主进程执行了
          启动:p.start()

  • ----在主进程等待指令之前加入     p.join()
    这个命令叫做"阻塞",意思是让主进程
    等待子进程结束之后,再执行join()之后的语句
    ----可以设置等待子进程时间    p.join(4)
    设置时间之后,主进程的阻塞时间只有4秒
  • 进程对象.is_alive()
    检测进程是否活着
    ----会有2个返回值
    True:活着
    False:死了
  • 进程对象.terminate()
    ----不管进程是否结束,
    强制终止进程
  • 实例:从键盘输入一个整数,分别开启两个进程来计算这个数的累加和和阶乘。
    (第一个进程用系统提供给我们的类,第二个进程需要自己定义)
  • from multiprocessing import Process
    
    #方法1:
    def sumToN(n):
    s = 0
    for i in range(1,n+1):
    s += i
    print("累加和:%d"%s) #方法2:
    class JieCheng(Process):
    def __init__(self,n):
    Process.__init__(self)
    self.n = n def run(self):
    j = 1
    for i in range(1, self.n + 1):
    j *= i
    print("%d!=%d"%(self.n, j)) if __name__ == "__main__":
    #输入一个数:
    str_num = input("请输入一个数:")
    num = int(str_num) #创建进程--计算
    #方法1: 系统提供给我们的类
    p1 = Process(target=sumToN,args=(num,))
    p1.start() #方法2:自己定义的类,也叫继承系统类
    p2 = JieCheng(num)
    p2.start()