亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

簡單介紹Python中利用生成器實現的并發編程

系統 1742 0

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

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

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

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

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

            
#coding=utf-8
import time
import sys
# 生產者
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)

          

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

通過上面的例子我們看到協程的調度對于內核來說是不可見的,協程間是協同調度的,這使得并發量在上萬的時候,協程的性能是遠高于線程的。

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

          

關于協程,可以參考greenlet,stackless,gevent,eventlet等的實現。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲一区二区免费视频 | 私人影院在线免费观看 | 四虎综合九九色九九综合色 | 99热久久国产精品免费观看 | 久久99国产综合精品 | 特黄特色一级aa毛片免费观看 | 国产真实乱子伦精品视 | 综合在线视频 | 天天草天天 | 在线观看免费视频a | 97se亚洲综合在线天天 | 日本在线精品视频 | 成年女人色毛片免费看 | 色成人综合 | 亚洲精品久久久久午夜福 | 国产欧美日韩免费一区二区 | 成人爽a毛片在线视频 | 国产免费一区二区在线看 | 欧洲精品| 91久久国产精品视频 | 久久99热这里只有精品免费看 | 日本中文字幕有码 | 久久久久久夜精品精品免费 | 免费看国产片 | 国产人成精品综合欧美成人 | 亚洲天堂一区二区三区 | 中文字幕日本一区久久 | 97精品高清一区二区三区 | 久久综合久久综合久久 | 欧美成人香蕉在线观看 | 欧美精品一级毛片 | 国产美女一级高清免费观看 | 狠狠色噜噜狠狠狠狠 | 国产视频精品久久 | 精品国产日韩亚洲一区二区 | 欧美性生交xxxxx丝袜 | 亚洲精品99久久久久久 | 欧美成人中文字幕dvd | 涩涩色视频在线播放 | 九9热这里真品 | 色色在线视频 |