最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡(jiǎn)單介紹Python中利用生成器實(shí)現(xiàn)的并發(fā)編程

 更新時(shí)間:2015年05月04日 10:12:37   投稿:goldensun  
這篇文章主要介紹了簡(jiǎn)單介紹Python中利用生成器實(shí)現(xiàn)的并發(fā)編程,使用yield生成器函數(shù)進(jìn)行多進(jìn)程編程是Python學(xué)習(xí)進(jìn)階當(dāng)中的重要知識(shí),需要的朋友可以參考下

我們都知道并發(fā)(不是并行)編程目前有四種方式,多進(jìn)程,多線程,異步,和協(xié)程。

多進(jìn)程編程在python中有類似C的os.fork,當(dāng)然還有更高層封裝的multiprocessing標(biāo)準(zhǔn)庫(kù),在之前寫過(guò)的python高可用程序設(shè)計(jì)方法中提供了類似nginx中master process和worker process間信號(hào)處理的方式,保證了業(yè)務(wù)進(jìn)程的退出可以被主進(jìn)程感知。

多線程編程python中有Thread和threading,在linux下所謂的線程,實(shí)際上是LWP輕量級(jí)進(jìn)程,其在內(nèi)核中具有和進(jìn)程相同的調(diào)度方式,有關(guān)LWP,COW(寫時(shí)拷貝),fork,vfork,clone等的資料較多,這里不再贅述。

異步在linux下主要有三種實(shí)現(xiàn)select,poll,epoll,關(guān)于異步不是本文的重點(diǎn)。

說(shuō)協(xié)程肯定要說(shuō)yield,我們先來(lái)看一個(gè)例子:

#coding=utf-8
import time
import sys
# 生產(chǎn)者
def produce(l):
  i=0
  while 1:
    if i < 5:
      l.append(i)
      yield i
      i=i+1
      time.sleep(1)
    else:
      return
   
# 消費(fèi)者
def consume(l):
  p = produce(l)
  while 1:
    try:
      p.next()
      while len(l) > 0:
        print l.pop()
    except StopIteration:
      sys.exit(0)
l = []
consume(l)

在上面的例子中,當(dāng)程序執(zhí)行到produce的yield i時(shí),返回了一個(gè)generator,當(dāng)我們?cè)赾ustom中調(diào)用p.next(),程序又返回到produce的yield i繼續(xù)執(zhí)行,這樣l中又append了元素,然后我們print l.pop(),直到p.next()引發(fā)了StopIteration異常。

通過(guò)上面的例子我們看到協(xié)程的調(diào)度對(duì)于內(nèi)核來(lái)說(shuō)是不可見的,協(xié)程間是協(xié)同調(diào)度的,這使得并發(fā)量在上萬(wàn)的時(shí)候,協(xié)程的性能是遠(yuǎn)高于線程的。

import stackless
import urllib2
def output():
  while 1:
    url=chan.receive()
    print url
    f=urllib2.urlopen(url)
    #print f.read()
    print stackless.getcurrent()
   
def input():
  f=open('url.txt')
  l=f.readlines()
  for i in l:
    chan.send(i)
chan=stackless.channel()
[stackless.tasklet(output)() for i in xrange(10)]
stackless.tasklet(input)()
stackless.run()

關(guān)于協(xié)程,可以參考greenlet,stackless,gevent,eventlet等的實(shí)現(xiàn)。

相關(guān)文章

  • Python lxml模塊安裝教程

    Python lxml模塊安裝教程

    這篇文章主要介紹了Python lxml模塊安裝教程,本文分別講解了Windows系統(tǒng)和Linux系統(tǒng)下的安裝教程,需要的朋友可以參考下
    2015-06-06
  • Python字符串對(duì)齊方法使用(ljust()、rjust()和center())

    Python字符串對(duì)齊方法使用(ljust()、rjust()和center())

    這篇文章主要介紹了Python字符串對(duì)齊方法使用(ljust()、rjust()和center()),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python中運(yùn)維神器Psutil的用法詳解

    Python中運(yùn)維神器Psutil的用法詳解

    Python的開源庫(kù)psutil為我們提供了一個(gè)強(qiáng)大的工具,能夠輕松獲取和分析系統(tǒng)利用率的信息,下面就跟隨小編一起深入了解一下它的具體使用吧
    2025-02-02
  • Python 腳本獲取ES 存儲(chǔ)容量的實(shí)例

    Python 腳本獲取ES 存儲(chǔ)容量的實(shí)例

    今天小編就為大家分享一篇Python 腳本獲取ES 存儲(chǔ)容量的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python3.5內(nèi)置模塊之time與datetime模塊用法實(shí)例分析

    Python3.5內(nèi)置模塊之time與datetime模塊用法實(shí)例分析

    這篇文章主要介紹了Python3.5內(nèi)置模塊之time與datetime模塊用法,結(jié)合實(shí)例形式分析了Python3.5 time與datetime模塊日期時(shí)間相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • python中的隨機(jī)數(shù)種子seed()用法說(shuō)明

    python中的隨機(jī)數(shù)種子seed()用法說(shuō)明

    這篇文章主要介紹了python中的隨機(jī)數(shù)種子seed()用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • python文件寫入實(shí)例分析

    python文件寫入實(shí)例分析

    這篇文章主要介紹了python文件寫入的用法,實(shí)例分析了Python文件寫入的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 利用python設(shè)計(jì)圖像加密技術(shù)(Arnold算法)

    利用python設(shè)計(jì)圖像加密技術(shù)(Arnold算法)

    這篇文章主要介紹了利用python設(shè)計(jì)圖像加密技術(shù)(Arnold算法),本文將借助Arnold置亂法,講解如何用python從頭至尾設(shè)計(jì)出一套圖像加密算法,需要的小伙伴可以才參考一下
    2022-03-03
  • Python分支語(yǔ)句常見的使用方法

    Python分支語(yǔ)句常見的使用方法

    這篇文章主要介紹了Python分支語(yǔ)句常見的使用方法,Python分支語(yǔ)句,也稱為選擇語(yǔ)句,體現(xiàn)了程序的選擇結(jié)構(gòu),即對(duì)應(yīng)不同的場(chǎng)景,選擇不同的處理方式,具體常見的用法需要的朋友可參考下面文章內(nèi)容
    2022-06-06
  • python進(jìn)程池的簡(jiǎn)單實(shí)現(xiàn)

    python進(jìn)程池的簡(jiǎn)單實(shí)現(xiàn)

    本文主要介紹了python進(jìn)程池的簡(jiǎn)單實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評(píng)論

方山县| 东平县| 安徽省| 隆子县| 海门市| 鹤岗市| 清苑县| 施秉县| 中江县| 贵州省| 陆丰市| 信丰县| 临西县| 金沙县| 成武县| 遵化市| 常德市| 凤阳县| 濮阳县| 新源县| 西峡县| 安仁县| 雷波县| 嘉义县| 保山市| 外汇| 汾阳市| 休宁县| 淅川县| 玉林市| 隆安县| 通渭县| 阿克陶县| 清远市| 平顶山市| 南投县| 札达县| 隆化县| 都江堰市| 阿瓦提县| 南宁市|