成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python multiprocess 使用 yield

劉東 / 2519人閱讀

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

python在處理數(shù)據(jù)的時(shí)候,memory-heavy 的數(shù)據(jù)往往會(huì)導(dǎo)致程序沒辦反運(yùn)行或者運(yùn)行期間服務(wù)器其他程序效率受到影響。這種情況往往會(huì)把數(shù)據(jù)集合變?yōu)橥ㄟ^genertor來遍歷。

但同時(shí)如我們所知,generoter看似只能被單進(jìn)程消費(fèi),這樣效率很低。

generator 可以被pool.map消費(fèi)。

看一下pool.py的源碼。

for i, task in enumerate(taskseq):
     ...
     try:
         put(task)
     except IOError:
         debug("could not put task on queue")
         break

實(shí)際是先將generator全部消費(fèi)掉放到queue中。然后通過map來并行。這樣是解決了使用map來并行。

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

第一步是全部消費(fèi)掉的generator。

第二步并行運(yùn)算全部data。

解決第一個(gè)問題,通過部分消費(fèi)generator來達(dá)到。
解決第二個(gè)問題,可以通過imap來達(dá)到.

示例代碼如下:

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: 使用注意事項(xiàng)。在produce數(shù)據(jù)的時(shí)候,盡量少做操作,應(yīng)為即使是map也是單線程的來消費(fèi)數(shù)據(jù)。所以盡量把操作放到map中作。這樣才能更好的利用多進(jìn)程提高效率。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/37568.html

相關(guān)文章

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

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

    Snailclimb 評(píng)論0 收藏0
  • Python 面試」第三次更新

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

    wslongchen 評(píng)論0 收藏0
  • python正則表達(dá)式簡(jiǎn)單爬蟲入門+案例(爬取貓眼電影TOP榜)

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

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

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

    lmxdawn 評(píng)論0 收藏0
  • python學(xué)習(xí)筆記 - fork, multiprocessing

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

    littleGrow 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<