摘要:實際是先將全部消費掉放到中。這樣是解決了使用來并行。但是依然沒有解決占用內存的問題。解決第二個問題,可以通過來達到示例代碼如下使用注意事項。在數據的時候,盡量少做操作,應為即使是也是單線程的來消費數據。這樣才能更好的利用多進程提高效率。
python在處理數據的時候,memory-heavy 的數據往往會導致程序沒辦反運行或者運行期間服務器其他程序效率受到影響。這種情況往往會把數據集合變為通過genertor來遍歷。
但同時如我們所知,generoter看似只能被單進程消費,這樣效率很低。
generator 可以被pool.map消費。看一下pool.py的源碼。
for i, task in enumerate(taskseq): ... try: put(task) except IOError: debug("could not put task on queue") break
實際是先將generator全部消費掉放到queue中。然后通過map來并行。這樣是解決了使用map來并行。
但是依然沒有解決占用內存的問題。這里有兩步占用內存。
第一步是全部消費掉的generator。
第二步并行運算全部data。
解決第一個問題,通過部分消費generator來達到。
解決第二個問題,可以通過imap來達到.
示例代碼如下:
import multiprocessing as mp import itertools import time def g(): for el in xrange(50): print el yield el import os def f(x): time.sleep(1) print str(os.getpid()) +" "+ str(x) return x * x if __name__ == "__main__": pool = mp.Pool(processes=4) # start 4 worker processes go = g() result = [] N = 11 while True: g2 = pool.imap(f, itertools.islice(go, N)) if g2: for i in g2: result.append(i) time.sleep(1) else: break print(result)
ps: 使用注意事項。在produce數據的時候,盡量少做操作,應為即使是map也是單線程的來消費數據。所以盡量把操作放到map中作。這樣才能更好的利用多進程提高效率。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37568.html
摘要:多線程對于爬蟲方面也可以表現出較好的性能。計算密集型就別想多線程了,一律多進程。所以同一時刻最大的并行線程數進程數的核數這條我的個人理解很模糊,參考吧多線程多線程有種通過的那種方式,非常普遍,此處就不寫了。 GIL的理解 GIL這個話題至今也是個爭議較多的,對于不用應用場景對線程的需求也就不同,說下我聽過的優點: 1. 我沒有用過其他語言的多線程,所以無法比較什么,但是對于I/O而言,...
摘要:說一下進程線程以及多任務多進程多線程和協程進程概念一個程序對應一個進程,這個進程被叫做主進程,而一個主進程下面還有許多子進程。避免了由于系統在處理多進程或者多線程時,切換任務時需要的等待時間。 showImg(https://segmentfault.com/img/bVbuYxg?w=3484&h=2480); 閱讀本文大約需要 10 分鐘。 14.說一下進程、線程、以及多任務(多進...
摘要:用迭代進行異步操作保存寫入文件配置啟動函數使用多進程加速一秒完成 用正則表達式實現一個簡單的小爬蟲 常用方法介紹 1、導入工具包 import requests #導入請求模塊 from flask import json #導入json模塊 from requests.exceptions import RequestException #異常捕捉模塊 import re #導入正則...
摘要:解決方法有兩種。代碼然而這段代碼只有在運行在處的時候才能用中斷,即前你按有效,一旦后則完全無效建議先確認是否真的需要用到多進程,如果是多的程序建議用多線程或協程,計算特別多則用多進程。 本文理論上對multiprocessing.dummy的Pool同樣有效。 python2.x中multiprocessing提供的基于函數進程池,join后陷入內核態,按下ctrl+c不能停止所有的進...
摘要:近年來,人工智能的興起使得更加火爆了。獲取當前進程父進程的。但是唯一遺憾的是,函數只能在系統中使用,不能在系統中使用。因此在下,需要將其包含在中。則是立即返回一個可迭代對象。則是返回可迭代函數。 Python一直是一門對初學者非常友好的語言,在數據分析、Web 開發、網絡安全、網絡爬蟲等方面應用廣泛。近年來,人工智能的興起使得 Python 更加火爆了。 我們在處理大量數據或者需要快速...
閱讀 896·2021-09-22 15:17
閱讀 1918·2021-09-22 15:06
閱讀 2219·2021-09-08 09:35
閱讀 5105·2021-09-01 11:43
閱讀 3480·2019-08-30 15:55
閱讀 2155·2019-08-30 12:48
閱讀 3155·2019-08-30 12:45
閱讀 1784·2019-08-29 17:31