成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

python multiprocess 使用 yield

劉東 / 2570人閱讀

摘要:實際是先將全部消費掉放到中。這樣是解決了使用來并行。但是依然沒有解決占用內(nèi)存的問題。解決第二個問題,可以通過來達到示例代碼如下使用注意事項。在數(shù)據(jù)的時候,盡量少做操作,應(yīng)為即使是也是單線程的來消費數(shù)據(jù)。這樣才能更好的利用多進程提高效率。

python在處理數(shù)據(jù)的時候,memory-heavy 的數(shù)據(jù)往往會導致程序沒辦反運行或者運行期間服務(wù)器其他程序效率受到影響。這種情況往往會把數(shù)據(jù)集合變?yōu)橥ㄟ^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來并行。

但是依然沒有解決占用內(nèi)存的問題。這里有兩步占用內(nèi)存。

第一步是全部消費掉的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數(shù)據(jù)的時候,盡量少做操作,應(yīng)為即使是map也是單線程的來消費數(shù)據(jù)。所以盡量把操作放到map中作。這樣才能更好的利用多進程提高效率。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/37568.html

相關(guān)文章

  • 經(jīng)驗拾憶(純手工)=> Python三程

    摘要:多線程對于爬蟲方面也可以表現(xiàn)出較好的性能。計算密集型就別想多線程了,一律多進程。所以同一時刻最大的并行線程數(shù)進程數(shù)的核數(shù)這條我的個人理解很模糊,參考吧多線程多線程有種通過的那種方式,非常普遍,此處就不寫了。 GIL的理解 GIL這個話題至今也是個爭議較多的,對于不用應(yīng)用場景對線程的需求也就不同,說下我聽過的優(yōu)點: 1. 我沒有用過其他語言的多線程,所以無法比較什么,但是對于I/O而言,...

    Snailclimb 評論0 收藏0
  • Python 面試」第三次更新

    摘要:說一下進程線程以及多任務(wù)多進程多線程和協(xié)程進程概念一個程序?qū)?yīng)一個進程,這個進程被叫做主進程,而一個主進程下面還有許多子進程。避免了由于系統(tǒng)在處理多進程或者多線程時,切換任務(wù)時需要的等待時間。 showImg(https://segmentfault.com/img/bVbuYxg?w=3484&h=2480); 閱讀本文大約需要 10 分鐘。 14.說一下進程、線程、以及多任務(wù)(多進...

    wslongchen 評論0 收藏0
  • python正則表達式簡單爬蟲入門+案例(爬取貓眼電影TOP榜)

    摘要:用迭代進行異步操作保存寫入文件配置啟動函數(shù)使用多進程加速一秒完成 用正則表達式實現(xiàn)一個簡單的小爬蟲 常用方法介紹 1、導入工具包 import requests #導入請求模塊 from flask import json #導入json模塊 from requests.exceptions import RequestException #異常捕捉模塊 import re #導入正則...

    xiaowugui666 評論0 收藏0
  • Python 中 Ctrl+C 不能終止 Multiprocessing Pool 的解決方案

    摘要:解決方法有兩種。代碼然而這段代碼只有在運行在處的時候才能用中斷,即前你按有效,一旦后則完全無效建議先確認是否真的需要用到多進程,如果是多的程序建議用多線程或協(xié)程,計算特別多則用多進程。 本文理論上對multiprocessing.dummy的Pool同樣有效。 python2.x中multiprocessing提供的基于函數(shù)進程池,join后陷入內(nèi)核態(tài),按下ctrl+c不能停止所有的進...

    lmxdawn 評論0 收藏0
  • python學習筆記 - fork, multiprocessing

    摘要:近年來,人工智能的興起使得更加火爆了。獲取當前進程父進程的。但是唯一遺憾的是,函數(shù)只能在系統(tǒng)中使用,不能在系統(tǒng)中使用。因此在下,需要將其包含在中。則是立即返回一個可迭代對象。則是返回可迭代函數(shù)。 Python一直是一門對初學者非常友好的語言,在數(shù)據(jù)分析、Web 開發(fā)、網(wǎng)絡(luò)安全、網(wǎng)絡(luò)爬蟲等方面應(yīng)用廣泛。近年來,人工智能的興起使得 Python 更加火爆了。 我們在處理大量數(shù)據(jù)或者需要快速...

    littleGrow 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<