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

資訊專欄INFORMATION COLUMN

多任務(wù)-----協(xié)程gevent的使用總結(jié)。

anRui / 2264人閱讀

摘要:協(xié)程一,迭代器能實(shí)現(xiàn)一定的數(shù)據(jù),但是又不會(huì)占用很大的空間,協(xié)程切換任務(wù)資源小,效率高。迭代器對(duì)象必須要有和方法。如果數(shù)據(jù)量很大的情況下,最好使用創(chuàng)建迭代器的方式來節(jié)省內(nèi)存空間。

協(xié)程

一,迭代器iterable 能實(shí)現(xiàn)一定的數(shù)據(jù),但是又不會(huì)占用很大的空間,協(xié)程切換任務(wù)資源小,效率高。
如何判斷某一類型是否可以迭代

from collections import Iterable???
print(isinstance([11,2,3], Iterable))

python2是如下實(shí)現(xiàn)的,python3中將range改成了xrange
range(2000)生成2000個(gè)值的結(jié)果,會(huì)占用很大的內(nèi)存空間
xrange(2000)是指生成2000個(gè)值的方式,占用很小的空間。

如果一個(gè)對(duì)象是迭代器,那么一定可以迭代,如果一個(gè)對(duì)象可以迭代,但不一定是迭代器。

迭代器對(duì)象必須要有__iter__和__next__方法。

如果數(shù)據(jù)量很大的情況下,最好使用創(chuàng)建迭代器的方式來節(jié)省內(nèi)存空間。
eg:

class Fibo(object):
    def __init__(self, all_num):
        self.all_num = all_num
        self.current_num = 0
        self.a = 0
        self.b = 1


    def __iter__(self):
        return self


    def __next__(self):
        if self.current_num < self.all_num:
            ret = self.a
            self.a, self.b = self.b, self.a + self.b
            self.current_num += 1

            return ret

        else:
            raise StopIteration

fibo = Fibo(20)

for temp in fibo:
    print(temp)

二, 生成器generator
生成器是一種特殊的迭代器,可以讓函數(shù)暫停執(zhí)行。所以可以利用生成器實(shí)現(xiàn)多任務(wù)。
生成迭代器有兩種方式:

(x*2 for x in range(10)) 返回值就是生成器。

含有yield的函數(shù),此時(shí)他不再是一個(gè)函數(shù),而是一個(gè)生成器對(duì)象

啟動(dòng)生成器有兩種方式,next和send,next優(yōu)先

eg:

def fibo(max_num):
    a, b = 0, 1
    current_num = 0
    while current_num < max_num:
        yield a
        a, b = b, a + b
        current_num += 1

fi = fibo(20)
while True:
    try:
        ret = next(fi)
        print(ret)
    except:
        break

三,協(xié)程greenlet、gevent完成多任務(wù)
gevent是協(xié)程最常用的一種方式。當(dāng)線程在等待執(zhí)行浪費(fèi)的時(shí)間,可以用協(xié)程來解決。協(xié)程會(huì)在等待時(shí)間去執(zhí)行別的方法。
eg:協(xié)程的實(shí)際使用

def download_pic(img_name, img_url):
    request = urllib.request.urlopen(img_url)
    img_content = request.read()

    with open(img_name, "wb") as f:
        f.write(img_content)


def main():
    gevent.joinall([
        gevent.spawn(download_pic, "1.jpg", "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1556006133066&di=6c4ea03a666b333328d59163b8137de9&imgtype=0&src=http%3A%2F%2Fattach.bbs.miui.com%2Fforum%2F201408%2F27%2F103420lzrq3jcimigfjmuw.jpg"),
        gevent.spawn(download_pic, "2.jpg", "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1556006133066&di=1f17489eb4f7fd3ce4f16c2365fab82a&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fblog%2F201511%2F08%2F20151108150337_tu32m.jpeg")
    ])


if __name__ == "__main__":
    main()

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

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

相關(guān)文章

  • python---協(xié)程

    摘要:隨著我們對(duì)于效率的追求不斷提高,基于單線程來實(shí)現(xiàn)并發(fā)又成為一個(gè)新的課題,即只用一個(gè)主線程很明顯可利用的只有一個(gè)情況下實(shí)現(xiàn)并發(fā)。作為的補(bǔ)充可以檢測(cè)操作,在遇到操作的情況下才發(fā)生切換協(xié)程介紹協(xié)程是單線程下的并發(fā),又稱微線程,纖程。 引子 之前我們學(xué)習(xí)了線程、進(jìn)程的概念,了解了在操作系統(tǒng)中進(jìn)程是資源分配的最小單位,線程是CPU調(diào)度的最小單位。按道理來說我們已經(jīng)算是把cpu的利用率提高很多了。...

    lolomaco 評(píng)論0 收藏0
  • python大佬養(yǎng)成計(jì)劃----協(xié)程

    摘要:協(xié)程,又稱微線程,纖程。最大的優(yōu)勢(shì)就是協(xié)程極高的執(zhí)行效率。生產(chǎn)者產(chǎn)出第條數(shù)據(jù)返回更新值更新消費(fèi)者正在調(diào)用第條數(shù)據(jù)查看當(dāng)前進(jìn)行的線程函數(shù)中有,返回值為生成器庫實(shí)現(xiàn)協(xié)程通過提供了對(duì)協(xié)程的基本支持,但是不完全。 協(xié)程,又稱微線程,纖程。英文名Coroutine協(xié)程看上去也是子程序,但執(zhí)行過程中,在子程序內(nèi)部可中斷,然后轉(zhuǎn)而執(zhí)行別的子程序,在適當(dāng)?shù)臅r(shí)候再返回來接著執(zhí)行。 最大的優(yōu)勢(shì)就是協(xié)程極高...

    svtter 評(píng)論0 收藏0
  • 談?wù)凱ython協(xié)程技術(shù)演進(jìn)

    摘要:事件循環(huán)是異步編程的底層基石。對(duì)事件集合進(jìn)行輪詢,調(diào)用回調(diào)函數(shù)等一輪事件循環(huán)結(jié)束,循環(huán)往復(fù)。協(xié)程直接利用代碼的執(zhí)行位置來表示狀態(tài),而回調(diào)則是維護(hù)了一堆數(shù)據(jù)結(jié)構(gòu)來處理狀態(tài)。時(shí)代的協(xié)程技術(shù)主要是,另一個(gè)比較小眾。 Coding Crush Python開發(fā)工程師 主要負(fù)責(zé)豈安科技業(yè)務(wù)風(fēng)險(xiǎn)情報(bào)系統(tǒng)redq。 引言 1.1. 存儲(chǔ)器山 存儲(chǔ)器山是 Randal Bryant 在《深入...

    zhiwei 評(píng)論0 收藏0
  • Python協(xié)程(真才實(shí)學(xué),想學(xué)進(jìn)來)

    摘要:所以與多線程相比,線程的數(shù)量越多,協(xié)程性能的優(yōu)勢(shì)越明顯。值得一提的是,在此過程中,只有一個(gè)線程在執(zhí)行,因此這與多線程的概念是不一樣的。 真正有知識(shí)的人的成長(zhǎng)過程,就像麥穗的成長(zhǎng)過程:麥穗空的時(shí)候,麥子長(zhǎng)得很快,麥穗驕傲地高高昂起,但是,麥穗成熟飽滿時(shí),它們開始謙虛,垂下麥芒。 ——蒙田《蒙田隨筆全集》 上篇論述了關(guān)于python多線程是否是雞肋的問題,得到了一些網(wǎng)友的認(rèn)可,當(dāng)然也有...

    lykops 評(píng)論0 收藏0
  • python大佬養(yǎng)成計(jì)劃--協(xié)程實(shí)現(xiàn)TCP連接

    摘要:協(xié)程實(shí)現(xiàn)連接在網(wǎng)絡(luò)通信中,每個(gè)連接都必須創(chuàng)建新線程或進(jìn)程來處理,否則,單線程在處理連接的過程中,無法接受其他客戶端的連接。所以我們嘗試使用協(xié)程來實(shí)現(xiàn)服務(wù)器對(duì)多個(gè)客戶端的響應(yīng)。 協(xié)程實(shí)現(xiàn)TCP連接 在網(wǎng)絡(luò)通信中,每個(gè)連接都必須創(chuàng)建新線程(或進(jìn)程) 來處理,否則,單線程在處理連接的過程中, 無法接受其他客戶端的連接。所以我們嘗試使用協(xié)程來實(shí)現(xiàn)服務(wù)器對(duì)多個(gè)客戶端的響應(yīng)。與單一TCP通信的構(gòu)架...

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

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

0條評(píng)論

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