zoukankan      html  css  js  c++  java
  • python 多进程操作

    由于python 多线程是无法在多核上发挥优势的,所以才用多进程的方式来折中将这个问题解决。

     1 from  multiprocessing import Pool
     2 import os
     3 def f(x):
     4     #打印变量和每个进程的pid这样在显示结果中可以看出是多进程
     5     print x,os.getpid()
     6     return x*x
     7 if __name__ == '__main__':
     8     #用pool 方法来生成一个进程池,每次可以执行5个进程
     9     p=Pool(5)
    10     #这个map函数是 multiprocessing 包装后的并不是自带的map函数
    11     print  p.map(f,range(5))
    View Code

    显示结果: 如果在windows下运行可能是取pid的方法不行显示pid都是一个,下面是linux测试执行的

    0 1191
    1 1194
    4 1197
    2 1195
    3 1196
    [0, 1, 4, 9, 16]

    并行执行

    看看下面这个利用Process方式完成多进程创建

    #_*_coding:utf-8_*_
    from  multiprocessing import Process
    import os,time
    def info(title):
        print title
        print 'module name:',__name__
        if hasattr(os,'getppid'):
            #打印主父进程pid
            print 'parent process:',os.getppid()
        #打印当前进程的pid
        print 'process id:',os.getpid()
    
    def f(name):
        info("subpro")
        time.sleep(1)
        print 'subprocess:',name
    if __name__ == '__main__':
        info('main process')
        print '-------------------'
        for i in range(2):
           p=Process(target=f,args=(i,))
           #fork进程,创建
           p.start()       p.join()#这样写主要是测试,这样就把进程阻塞主了。真正处理的时候必须写在for外面要不执行方式还是串行
           print 11111111
        #p.join()

    执行结果:

  • 相关阅读:
    C++ sort()函数的用法
    对C++里面 的知识积累:
    codevs 1160
    hdu 1020 Encoding
    poj 2591 Set Definition
    hdu 1505,1506
    hdu 1284 钱币兑换
    hdu 1231 最大连续子序列 ,1003 Max Sum;
    尺取法
    android OTA package packing and extract to partition
  • 原文地址:https://www.cnblogs.com/menkeyi/p/5806945.html
Copyright © 2011-2022 走看看