1. 程式人生 > 程式設計 >python生成器/yield協程/gevent寫簡單的圖片下載器功能示例

python生成器/yield協程/gevent寫簡單的圖片下載器功能示例

本文例項講述了python生成器/yield協程/gevent寫簡單的圖片下載器功能。分享給大家供大家參考,具體如下:

1、生成器:

'''第二種生成器'''
# 函式只有有yield存在就是生成器
def test(i):
  while True:
    i += 1
    res = yield i
    print(res)
    i += 1
  return res
def main():
  t = test(1) # 建立生成器物件
  print(next(t)) # next第一次執行從上到下,yield是終點
  print(next(t))
  print(t.send(5))
if __name__ == '__main__':
  main()

執行結果:

2
None
4
5
6

2、yield協程demo:

def run1():
  while True:
    print('run1____')
    yield
def run2():
  while True:
    print('run2____')
    yield
def main():
  while True:
    next(run1())
    next(run2())
if __name__ == '__main__':
  main()

3、gevent寫簡單的下載圖片

import gevent
import requests,lxml
# from gevent import monkey
# monkey.patch_all()
def get_pic(url,list):
  headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/68.0.3440.106 Safari/537.36'
  }
  response = requests.get(url,headers=headers)
  with open('./pic/'+str(list.pop(0)) + '.png','wb') as f:
    f.write(response.content)
def get_pic_name_list():
def main():
  get_pic_name_list()
  list = [x for x in range(9999)]
  gevent.joinall([
    gevent.spawn(get_pic,'http://pic8.iqiyipic.com/image/20181008/eb/af/v_116880780_m_601_m11_180_236.jpg',list),gevent.spawn(get_pic,'http://pic6.iqiyipic.com/image/20181004/a2/2b/v_112874372_m_601_m15_180_236.jpg',list)
  ])
if __name__ == '__main__':
  main()

更多關於Python相關內容可檢視本站專題:《Python資料結構與演算法教程》、《Python Socket程式設計技巧總結》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》及《Python入門與進階經典教程》

希望本文所述對大家Python程式設計有所幫助。