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

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

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

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

多進程編程在python中有類似C的os.fork,當然還有更高層封裝的multiprocessing標準庫,在之前寫過的python高可用程序設計方法中提供了類似nginx中master process和worker process間信號處理的方式,保證了業(yè)務進程的退出可以被主進程感知。

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

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

說協(xié)程肯定要說yield,我們先來看一個例子:

#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
   
# 消費者
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)

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

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

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()

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

相關文章

  • Python lxml模塊安裝教程

    Python lxml模塊安裝教程

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

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

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

    Python中運維神器Psutil的用法詳解

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

    Python 腳本獲取ES 存儲容量的實例

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

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

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

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

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

    python文件寫入實例分析

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

    利用python設計圖像加密技術(Arnold算法)

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

    Python分支語句常見的使用方法

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

    python進程池的簡單實現(xiàn)

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

最新評論

明水县| 惠水县| 金塔县| 依安县| 万盛区| 芜湖县| 临汾市| 泸定县| 当涂县| 紫阳县| 通化县| 饶阳县| 咸丰县| 崇礼县| 甘洛县| 鸡东县| 南部县| 石城县| 错那县| 库伦旗| 襄城县| 苍山县| 麻江县| 阿坝县| 苏尼特左旗| 卢氏县| 綦江县| 郴州市| 界首市| 鹤山市| 中牟县| 平和县| 永康市| 棋牌| 张家口市| 平泉县| 板桥市| 水富县| 青田县| 敦煌市| 都昌县|