最近在解決問題的時候遇到了上下文衝突的問題,不得不用多進程來解決這個問題。
這個問題是StackOverflow沒有完整答案的問題,下一篇博客進行介紹。
多進程
python中使用multiprocessing模塊實現多進程。multiprocessing模塊提供了一個Process類來代表一個進程對象,這個模塊表示像線程一樣管理進程,是multiprocessing的核心,它與threading很相似,對多核CPU的利用率會比threading好的多。
Pool類Pool類可以提供指定數量的進程供用戶調用,當有新的請求提交到Pool中時,如果池還沒有滿,就會創建一個新的進程來執行請求。如果池滿,請求就會告知先等待,直到池中有進程結束,才會創建新的進程來執行這些請求。
Signature: Pool(processes=None, initializer=None, initargs=(), maxtasksperchild=None)
Docstring: Returns a process pool object
File: /usr/lib/python3.5/multiprocessing/context.py
Type: method
Pool 中提供了如下幾個方法:
apply()
apply_async()
map()
map_async()
close()
terminal()
join()
這裡主要說一下apply和apply_async兩個,其他的內容可以進行百度搜索
applySignature: pool.apply(func, args=(), kwds={})
Docstring: Equivalent of `func(*args, **kwds)`.
File: /usr/lib/python3.5/multiprocessing/pool.py
Type: method
apply函數主要用於傳遞不定參數,主進程會被阻塞到函數執行結束。也就是說只有apply裡面的內容被執行完了,才會進行執行主函數的內容。
apply_asyncSignature: pool.apply_async(func, args=(), kwds={}, callback=None, error_callback=None)
Docstring: Asynchronous version of `apply()` method.
File: /usr/lib/python3.5/multiprocessing/pool.py
Type: method
推薦↓↓↓
涵蓋:程式設計師大咖、源碼共讀、程式設計師共讀、數據結構與算法、黑客技術和網絡安全、大數據科技、編程前端、Java、Python、Web編程開發、Android、iOS開發、Linux、資料庫研發、幽默程式設計師等。