zoukankan      html  css  js  c++  java
  • pyrhon多进程操作初探

    linux系统中提供了fork函数进行进程的创建,这个接口在函数返回上比较特殊,有两个返回值,一个是子进程返回值为0,一个是父进程返回值,值大于0,表是子进程的ID.如果小于0.则表示接口出错.

    python做为一个跨平台的语言,在os包中也提供了fork接口,并且沿袭了linux系统中fork接口的传统,接口有两个返回值,含义和linux系统中相似.具体使用如下:
     
    注意事项:多进程在win系统中可能会报错,因为win系统中没有fork接口,所以在学习python的时候还是推荐使用linux或者mac系统,mac系统为上选.
     
    一、使用os.fork
    #!/usr/bin/python
    #coding:utf-8
    import os
    
    print "proess id is %d" % os.getpid()
    
    p = os.fork()
    if(p==0):
        print "this is a child process"
    elif p>0:
        print "this is a pp proccess %d" % p

    运行结果:

    proess id is 27048

    this is a pp proccess 27053

    this is a child process

    二、使用process

    Process在multiproccessing包中,功能是创建进程,包含的方法主要有:is_alive()、join([timeout])、run()、start()、terminate()。其中,Process以start()启动某个进程
    #!/usr/bin/python
    #coding:utf-8
    import os
    from multiprocessing import Process
    
    def domyprocess(msg):
        print 'process id is %d ' % os.getpid()
        return
    
    if __name__ == '__main__':
        print 'paraent proccess id %s' % os.getpid()
        t1 = Process(target=domyprocess,args=('hello',))
        t1.start()
        t1.join()
        t2 = Process(target=domyprocess,args=('world',))
        t2.start()
        t2.join()

    运行结果:

    paraent proccess id 27616

    process id is 27621 

    process id is 27622

    三、进程池pool

    pool提供了可以创建多个进程的功能,默认情况下,pool创建的进程数和计算机的CPU核数相等.正式因为这个原因,也是我们的例子里面为什么没有5个进程同时运行,而是先运行了4个,有一个结束后,才启动了第5个进程.
    如果想要指定进程数,可以在使用的时候指定进程池中的进程数.如:pool(10)
    #!/usr/bin/python
    #coding:utf-8
    import os, time, random
    from multiprocessing import Pool
    
    def domyprocess(msg):
        print '%s process id is %d ' % (msg,os.getpid())
        begin = time.time()
        time.sleep(random.random()*3)
        end = time.time()
        print '%d run %d seconds' % (os.getpid(),end-begin)
        return
    
    if __name__ == '__main__':
        print 'paraent proccess id %s' % os.getpid()
        p=Pool();
        for i in range(5):
            p.apply_async(domyprocess,args=(1,))
        print 'wait process to do....'
        p.close()
        p.join()
        print 'process are run end....'

    运行结果:

    paraent proccess id 28191

    wait process to do....

    1 process id is 28197 

    1 process id is 28199 

    1 process id is 28198 

    1 process id is 28200 

    28197 run 0 seconds

    1 process id is 28197 

    28200 run 1 seconds

    28198 run 2 seconds

    28199 run 2 seconds

    28197 run 1 seconds

    process are run end....

    学习永无止境,我将继续前行

  • 相关阅读:
    搭建高可用K8S集群
    K8S部署apollo配置中心
    微服务二:微服务的拆分、设计模式、内部结构
    微服务一:微服务概念入门及发展历程
    k8s可视化管理dashboard
    Windows节点加入K8S集群(K8S搭建Linux和Window混合集群)
    K8S搭建单点集群+问题处理
    K8S核心概念
    毕业论文word排版设置
    Anaconda3+PyTorch安装教程
  • 原文地址:https://www.cnblogs.com/newzol/p/8663721.html
Copyright © 2011-2022 走看看