zoukankan      html  css  js  c++  java
  • python 进程

    #fork在window下不支持

    import os
    import time
    import sys 
     
    pid = os.fork()
    if pid == 0:#子进程
            time.sleep(5)
            print('After 5 seconds')
            print('line%d:fork进程%d,PID=%d,父PID=%d'%(sys._getframe().f_lineno,pid,os.getpid(),os.getppid()))
    else:#主进程
            print('line%d:fork进程%d,PID=%d,父PID=%d'%(sys._getframe().f_lineno,pid,os.getpid(),os.getppid()))
            pid = os.fork()
            if pid == 0:
                    print('line%d:fork进程%d,PID=%d,父PID=%d'%(sys._getframe().f_lineno,pid,os.getpid(),os.getppid()))
            else:
                    print('line%d:fork进程%d,PID=%d,父PID=%d'%(sys._getframe().f_lineno,pid,os.getpid(),os.getppid()))
    pid = os.fork()
    if pid == 0:
            print('line%d:fork进程%d,PID=%d,父PID=%d'%(sys._getframe().f_lineno,pid,os.getpid(),os.getppid()))
    else:
            print('line%d:fork进程%d,PID=%d,父PID=%d'%(sys._getframe().f_lineno,pid,os.getpid(),os.getppid()))

    line11:fork进程1625,PID=1624,父PID=1486

    line16:fork进程1626,PID=1624,父PID=1486

    line14:fork进程0,PID=1626,父PID=1624

    line21:fork进程1628,PID=1626,父PID=1624

    line21:fork进程1627,PID=1624,父PID=1486

    line19:fork进程0,PID=1627,父PID=1624

    [chaoge@localhost ~]$ line19:fork进程0,PID=1628,父PID=1

    After 5 seconds

    line9:fork进程0,PID=1625,父PID=1

    line21:fork进程1629,PID=1625,父PID=1

    line19:fork进程0,PID=1629,父PID=1625


    #Process 可以跨平台

    from multiprocessing import Process
    import time
    import os
     
    #子进程
    def childProcess(name):
        print("子进程运行中,name=%s,pid=%d"%(name,os.getpid()))
         
     
     
    if __name__ == '__main__':
        print('父进程%d.'%os.getpid())
        cp = Process(target=childProcess,args=('test',))
        print('子进程将要执行')
        cp.start()#启动进程实例
        #cp.terminate()#终止子进程
        alive = cp.is_alive()#判断进程是否活着
        print('is_alive:%s'%alive)
        cp.join()#阻塞,join([timeout]),join(2)阻塞2秒
        print('子进程结束')
        alive = cp.is_alive()#判断进程是否活着
        print('is_alive:%s'%alive)

    父进程7268.

    子进程将要执行

    is_alive:True

    子进程运行中,name=test,pid=3124

    子进程结束

    is_alive:False


    #进程池

    from multiprocessing import Pool
    import os,time,random
     
    def worker(msg):
        t_start = time.time()
        print('%s开始执行,进程号为%d'%(msg,os.getpid()))
        #random.random() 随机生成0~1之间的浮点数
        time.sleep(random.random()*2)
        t_stop = time.time()
        print(msg,"执行完毕,耗时%0.2f"%(t_stop-t_start))
     
    if __name__ == '__main__':
        po = Pool(3)#定义一个进程池,进程数3
        for i in range(0,10):
            po.apply_async(worker,(i,))#po.apply_async(worker,(i,))非阻塞模式,po.apply(worker,(i,))阻塞模式 
        print("---start---")
        po.close()#关闭进程池
        po.join()#等待po中的所有子进程执行完,放在close之后
        print('---end---')

    ---start---

    0开始执行,进程号为1910

    2开始执行,进程号为1912

    1开始执行,进程号为1911

    0 执行完毕,耗时0.49

    3开始执行,进程号为1910

    1 执行完毕,耗时0.64

    4开始执行,进程号为1911

    3 执行完毕,耗时0.26

    5开始执行,进程号为1910

    2 执行完毕,耗时1.28

    6开始执行,进程号为1912

    4 执行完毕,耗时0.97

    7开始执行,进程号为1911

    5 执行完毕,耗时1.38

    8开始执行,进程号为1910

    6 执行完毕,耗时1.49

    9开始执行,进程号为1912

    8 执行完毕,耗时1.21

    7 执行完毕,耗时1.81

    9 执行完毕,耗时1.72

    ---end---



  • 相关阅读:
    光纤收发器的连接及收发器指示灯故障诊断
    Keepalive介绍及工作原理
    RabbitMQ消息队列集群配置-1
    python2 centos7 安装mysql-python库
    etcd服务的安装与配置 yum安装新版本
    ETCD集群安装配置及简单应用 老版本
    查看mysql 最大连接数,连接线程数
    TCP连接状态详解及TIME_WAIT过多的解决方法
    Linux 进程打开最大文件连接数Too many open files
    redis 连接数 修改
  • 原文地址:https://www.cnblogs.com/fonyer/p/9784871.html
Copyright © 2011-2022 走看看