19 python

多进程: 各个进程有自己独立的内存空间

    import os

    pid = os.fork()

    if pid < 0:

        print("failed")

    elif pid == 0:

        print("child")

    else:

        print("father child is %d"%pid)

使用muiltiprocessing模块儿 创建进程 Process类代表一个进程对象

    from muiltprocessing import Process

    import os

    def run_proc(name)

        print("child start")

    print("father")

    p = Process(target=run_proc, atgs=('test',))

    print("child wild start")

    p.start()

    p.join()

    print("child end")

Process类常用方法

    is_alive 是否还在执行

    join 是否等待执行结束

    start 启动

    run() 如果没有给定target参数 对象调用start就将执行对象中的run方法

    terminate 不管任务是否完成立即终止

Process常用属性

    name 当前实例别名 默认为Process-N

    pid 当前进程实例的PID值

子类化Process

  1 from multiprocessing import Process
  2 import os
  3 import time
  4 
  5 class MyProcess(Process):
  6     def __init__(self, interval):
  7         super().__init__()
  8         self.interval = interval
  9     def run(self):
 10         print("child")
 11         startTime = time.time()
 12         time.sleep(self.interval)
 13         stopTime = time.time()
 14         print("id:%d father:%d, cost:%d"%(os.getpid(), os.getppid(), stopTime-startTime))
 15 print("father")
 16 startTime = time.time()
 17 p = MyProcess(1)
 18 p.start();
 19 p.join()
 20 stopTime = time.time()

 21 print("end cost:%d"%(stopTime-startTime))

进程池

    当创建的紫禁城不多时可以利用Process动态生成多个进程,但是上百上千个目标 手动创建需要很大的工作量

   此时可以利用进程池创建

  1 from multiprocessing import  Pool
  2 import time
  3 import os
  4 
  5 def worker(msg):
  6     print("id:%d"%os.getpid())
  7     startTime = time.time()
  8     time.sleep(2)
  9     stopTime = time.time()
 10     print("msg:%s, cost:%d"%(msg, stopTime-startTime))
 11 pool = Pool(3)
 12 for x in range(10):
 13     pool.apply_async(worker, (x,))
 14 
 15 pool.close()

 16 pool.join()

消息队列

    Manager().Queue() 用于进程共享数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值