map與apply區別
阿新 • • 發佈:2018-12-09
1. 使用map方法
Python程式碼
- import multiprocessing
- import time
- def f(x):
- time.sleep(2)
- print x
- if __name__ == '__main__':
- pool = multiprocessing.Pool(processes=5)
- pool.map(f, xrange(10))
- 併發5個程序
- map方法會依次將引數二陣列每個元素傳入引數1方法中
- 如果將map()替換為map_async(),則方法不會阻塞,而是直接執行main程序後面的程式碼,所以要配合pool.close()和pool.join()一起使用。close()方法是使pool不再接受新任務;join()方法是阻塞main程序等待子程序執行完成才可以執行後面code
2. 使用apply方法
Python程式碼
- import multiprocessing
- import time
- def func(msg):
- print msg
- time.sleep(1
- if __name__ == "__main__":
- print 'start main-process'
- pool = multiprocessing.Pool(processes=4)
- for i in xrange(10):
- msg = "hello %d" %(i)
- pool.apply_async(func, (msg, ))
- pool.close()
- pool.join()
- print "Sub-process(es) done."
- print 'Main-process done.'
- apply_async和apply方法區別是前者不會阻塞main程序,需要用pool.close()和join()方法阻塞等待子程序執行。
- apply與map方法相比,它只是呼叫方法和引數,而map方法會將陣列引數迭代傳給被呼叫方法
- pool.apply_async(func, (msg, )) 這行msg後面的逗號是不能省略的,否則不會執行func方法
--end