1. 程式人生 > >map與apply區別

map與apply區別

1. 使用map方法

 

Python程式碼   收藏程式碼
  1. import multiprocessing  
  2. import time  
  3.   
  4. def f(x):  
  5.     time.sleep(2)  
  6.     print x  
  7.   
  8. if __name__ == '__main__':   
  9.   pool = multiprocessing.Pool(processes=5)   
  10.   pool.map(f, xrange(10))  
  •  併發5個程序
  • map方法會依次將引數二陣列每個元素傳入引數1方法中
  • 如果將map()替換為map_async(),則方法不會阻塞,而是直接執行main程序後面的程式碼,所以要配合pool.close()和pool.join()一起使用。close()方法是使pool不再接受新任務;join()方法是阻塞main程序等待子程序執行完成才可以執行後面code

2. 使用apply方法

 

 

Python程式碼   收藏程式碼
  1. import multiprocessing  
  2. import time  
  3.    
  4. def func(msg):  
  5.     print msg  
  6.     time.sleep(1
    )  
  7.    
  8. if __name__ == "__main__":  
  9.     print 'start main-process'  
  10.     pool = multiprocessing.Pool(processes=4)  
  11.     for i in xrange(10):  
  12.         msg = "hello %d" %(i)  
  13.         pool.apply_async(func, (msg, ))  
  14.     pool.close()  
  15.     pool.join()  
  16.     print "Sub-process(es) done."  
  17.     print 'Main-process done.'  

 

  •  apply_async和apply方法區別是前者不會阻塞main程序,需要用pool.close()和join()方法阻塞等待子程序執行。
  • apply與map方法相比,它只是呼叫方法和引數,而map方法會將陣列引數迭代傳給被呼叫方法
  • pool.apply_async(func, (msg, )) 這行msg後面的逗號是不能省略的,否則不會執行func方法

--end