国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Python實用技巧大任務切分

開發 后端
今天來說說,Python 中的任務切分。以爬蟲為例,從一個存 url 的 txt 文件中,讀取其內容,我們會獲取一個 url 列表。我們把這一個 url 列表稱為大任務。

 今天來說說,Python 中的任務切分。以爬蟲為例,從一個存 url 的 txt 文件中,讀取其內容,我們會獲取一個 url 列表。我們把這一個 url 列表稱為大任務。

[[283503]]

列表切分在

不考慮內存占用的情況下,我們對上面的大任務進行一個切分。比如我們將大任務切分成的小任務是每秒最多只訪問5個URL。

 

  1. import os 
  2. import time 
  3.  
  4. CURRENT_DIR = os.path.dirname(os.path.abspath(__file__)) 
  5.  
  6. def read_file(): 
  7.     file_path = os.path.join(CURRENT_DIR, "url_list.txt"
  8.     with open(file_path, "r", encoding="utf-8"as fs: 
  9.         result = [i.strip() for i in fs.readlines()] 
  10.     return result 
  11.  
  12. def fetch(url): 
  13.     print(url) 
  14.  
  15. def run(): 
  16.     max_count = 5 
  17.     url_list = read_file() 
  18.     for index in range(0, len(url_list), max_count): 
  19.         start = time.time() 
  20.         fetch(url_list[index:index + max_count]) 
  21.         end = time.time() - start 
  22.         if end < 1: 
  23.             time.sleep(1 - end
  24.  
  25.  
  26. if __name__ == '__main__'
  27.     run() 

關鍵代碼都在for循環里,首先我們通過聲明range的第三個參數,該參數指定迭代的步長為5,這樣每次index增加都是以5為基數,即0,5,10。。。

然后我們對url_list做切片,每次取其五個元素,這五個元素會隨著index的增加不斷的在改變,如果最后不夠五個了,按照切片的特性這個時候就會有多少取多少了,不會造成索引超下標的問題。

隨著url列表的增加,我們會發現內存的占用也在提高了。這個時候我們就需要對代碼進行修改了,我們知道生成器是比較節省內存的空間的,修改之后代碼變成,下面的這樣。

生成器切分

 

  1. # -*- coding: utf-8 -*- 
  2. # @時間 : 2019-11-23 23:47 
  3. # @作者 : 陳祥安 
  4. # @文件名 : g.py 
  5. # @公眾號: Python學習開發 
  6. import os 
  7. import time 
  8. from itertools import islice 
  9.  
  10. CURRENT_DIR = os.path.dirname(os.path.abspath(__file__)) 
  11.  
  12.  
  13. def read_file(): 
  14.     file_path = os.path.join(CURRENT_DIR, "url_list.txt"
  15.     with open(file_path, "r", encoding="utf-8"as fs: 
  16.         for i in fs: 
  17.             yield i.strip() 
  18.  
  19.  
  20. def fetch(url): 
  21.     print(url) 
  22.  
  23.  
  24. def run(): 
  25.     max_count = 5 
  26.     url_gen = read_file() 
  27.     while True
  28.         url_list = list(islice(url_gen, 0, max_count)) 
  29.         if not url_list: 
  30.             break 
  31.         start = time.time() 
  32.         fetch(url_list) 
  33.         end = time.time() - start 
  34.         if end < 1: 
  35.             time.sleep(1 - end
  36.  
  37.  
  38. if __name__ == '__main__'
  39.     run() 

首先,我們修改了文件讀取的方式,把原來讀列表的形式,改為了生成器的形式。這樣我們在調用該文件讀取方法的時候大大節省了內存。

然后就是對上面for循環進行改造,因為生成器的特性,這里不適合使用for進行迭代,因為每一次的迭代都會消耗生成器的元素,通過使用itertools的islice對url_gen進行切分,islice是生成器的切片,這里我們每次切分出含有5個元素的生成器,因為生成器沒有__len__方法所以,我們將其轉為列表,然后判斷列表是否為空,就可以知道迭代是否該結束了。

修改之后的代碼,不管是性能還是節省內存上都大大的提高。讀取千萬級的文件不是問題。

除此之外,在使用異步爬蟲的時候,也許會用到異步生成器切片。下面就和大家討論,異步生成器切分的問題

異步生成器切分

首先先來看一個簡單的異步生成器。

我們知道調用下面的代碼會得到一個生成器

 

  1. def foo(): 
  2.     for i in range(20): 
  3.         yield i 

如果在def前面加一個async,那么在調用的時候它就是個異步生成器了。

完整示例代碼如下

 

  1. import asyncio 
  2. async def foo(): 
  3.     for i in range(20): 
  4.         yield i 
  5.  
  6.  
  7. async def run(): 
  8.     async_gen = foo() 
  9.     async for i in async_gen: 
  10.         print(i) 
  11.  
  12.  
  13. if __name__ == '__main__'
  14.     asyncio.run(run()) 

關于async for的切分有點復雜,這里推薦使用aiostream模塊,使用之后代碼改為下面這樣

 

  1. import asyncio 
  2. from aiostream import stream 
  3.  
  4. async def foo(): 
  5.     for i in range(22): 
  6.         yield i 
  7.  
  8.  
  9. async def run(): 
  10.     index = 0 
  11.     limit = 5 
  12.  
  13.     while True
  14.         xs = stream.iterate(foo()) 
  15.         ys = xs[index:index + limit] 
  16.         t = await stream.list(ys) 
  17.         if not t: 
  18.             break 
  19.         print(t) 
  20.         index += limit 
  21.  
  22.  
  23. if __name__ == '__main__'
  24.     asyncio.run(run()) 

 

責任編輯:華軒 來源: Python學習開發
相關推薦

2009-09-04 10:27:28

Linux實用技巧linux操作系統linux

2022-03-23 09:18:10

Git技巧Linux

2009-12-21 15:50:39

2009-01-03 09:34:30

ASP.NET.NET性能優化

2022-10-11 08:00:47

多線程開發技巧

2022-11-03 10:28:59

PandasSAC機制

2011-04-08 15:40:01

Oracle認證

2024-05-17 08:52:43

SQL實用技巧行列轉換

2024-05-22 09:29:43

2009-12-09 11:21:30

Linux實用技巧

2019-12-22 23:10:19

LinuxSSH加密

2010-09-14 10:41:24

DIV+CSS排版

2010-10-08 15:44:17

vim

2009-12-23 17:32:35

Linux構建軟路由

2019-10-10 16:31:51

PyCharmPythonWindows

2024-04-16 08:24:58

Python_str__()方法字符串

2018-05-10 17:39:13

Python 機器學習編程語言

2021-11-15 10:02:16

Python命令技巧

2023-04-26 00:34:36

Python技巧程序員

2024-09-11 16:30:55

Python函數編程
點贊
收藏

51CTO技術棧公眾號

国产精品一卡二| 欧美一区二区视频免费观看| 日韩欧美精品久久| 亚州av一区| 久久久精品视频在线观看| 欧美videosex性极品hd| 亚洲欧美另类小说| 男人插女人下面免费视频| 国产在线不卡视频| 欧美日韩亚洲一区二区三区四区| 欧美在线1区| 国产日产亚洲精品| 欧美日韩在线网站| 国产精品久久久久9999| 亚洲97av| 国产成人精品最新| 日韩在线二区| 成人精品视频在线| 久久久久久影院| 91在线观看免费| 国产在线不卡| 久久国产精品-国产精品| 亚洲理伦在线| 日韩精品一区二区三区四区五区| 日韩精品成人一区二区三区| 日本午夜精品一区二区三区| 日韩国产欧美在线观看| 在线成人性视频| 国产不卡免费视频| 国产亚洲精品网站| 亚洲人成伊人成综合网小说| 免费男女羞羞的视频网站主页在线观看 | 国产精品视频免费一区二区三区| 国产精品伦理久久久久久| 国产一区红桃视频| 黄色成人在线网站| 一区二区av| 久久天天做天天爱综合色| 国产又黄又猛又粗| 黄色91在线观看| av免费在线网站| 亚洲无亚洲人成网站77777| 99综合久久| 日韩av片电影专区| 欧美天天在线| 日韩视频 中文字幕| 日本一区二区三区在线观看| 超碰在线电影| 欧美成人一区二区| 免费一区二区三区在线视频| 国产成人亚洲综合91精品| 亚洲性感美女99在线| 一本二本三本亚洲码| 99久久久无码国产精品| 性生活免费在线观看| 欧美视频精品一区| www.色在线| 欧美亚洲免费电影| 激情文学一区| 97成人在线观看视频| 亚洲成人av一区| 岛国毛片av在线| 海角国产乱辈乱精品视频| 国产精品99一区二区三区| 中文字幕在线中文字幕日亚韩一区| 99这里只有久久精品视频| 360天大佬第二季在线观看| 欧美日韩国产综合视频在线观看 | 超碰这里只有精品| 国产精品精品久久久| 日韩国产欧美视频| 邪恶网站在线观看| 7777精品久久久大香线蕉| 色老板亚洲精品一区| 午夜大尺度福利视频| 亚洲激情视频在线观看| 欧美成人黄色网址| 久99久在线视频| 黄页视频在线91| 最近中文字幕mv2018在线高清| 欧美精品福利在线| 校园春色综合网| 成人满18在线观看网站免费| 中文字幕一精品亚洲无线一区 | 欧美日韩小视频| 999精品嫩草久久久久久99| 少妇免费毛片久久久久久久久| 欧美成人bangbros| 99久久亚洲精品| 97成人在线观看视频| 亚洲欧美福利视频| 国产亚洲高清视频| 91成人在线观看国产| 午夜亚洲激情| www.成人69.com| 亚洲欧美激情视频| 日韩亚洲国产欧美| 久草热久草在线频| 午夜美女久久久久爽久久| 国模娜娜一区二区三区| 亚洲搞黄视频| 国产精品美女久久| 中文字幕av不卡| 亚洲第一影院| 亚洲精品永久www嫩草| 在线看国产一区| 希岛爱理av一区二区三区| 蜜桃特黄a∨片免费观看| 久久在线观看视频| 99re热这里只有精品免费视频| 国产精品论坛| 日韩资源av在线| 欧美福利电影网| 久久综合av| 2021av天天| 久久久久久久国产精品视频| 国产一区二区三区蝌蚪| 午夜影院免费在线| 久草热久草热线频97精品| 精品国产乱码久久久久久天美| 欧美理论电影在线精品| 激情六月丁香婷婷| 久久精品国产清自在天天线 | 欧美偷拍视频| 91精品国产高清自在线看超| 久久精品在线观看| 超碰国产精品一区二页| 成人短视频在线观看免费| 日韩电影第一页| 国产激情一区二区三区四区| 日本久久免费| 国产九色porny| 最近2019年好看中文字幕视频| 国产一区二区三区香蕉| 精精国产xxxx视频在线播放| 日本不卡在线播放| 亚洲国产私拍精品国模在线观看| 日韩高清一区在线| 成人一级福利| 成人在线免费观看视频网站| 一区二区三区动漫| 久久久久久久久久久黄色 | 欧美wwwww| 黄色视屏网站在线免费观看| 51午夜精品| 日韩一区二区三区高清免费看看| 久久久久网站| 周于希免费高清在线观看| 国产性生活免费视频| 在线观看亚洲视频| 欧美韩国日本一区| 精品日韩免费| av网站无病毒在线| 亚洲国产精品一区二区第四页av| 亚洲欧美中文日韩在线v日本| k8久久久一区二区三区| 天堂在线精品| 韩国三级av在线免费观看| 蜜桃视频在线观看成人| 亚洲欧美日韩国产成人| 久久久久国产一区二区三区四区| 久9re热视频这里只有精品| 九色在线网站| 日韩经典在线视频| 精品国产美女在线| 亚洲国产中文字幕在线视频综合| 国模大胆一区二区三区| 久久大胆人体| 日日噜噜夜夜狠狠| 成人18视频| 一个色综合导航| 亚洲最快最全在线视频| 中文欧美日韩| 国内不卡的一区二区三区中文字幕| 日本中文字幕电影| 日本一区二区免费看| 欧美激情一二三| 在线91免费看| 中文字幕成人av| 久久不射中文字幕| 日韩在线观看一区二区三区| 亚洲免费av一区二区| 中文字幕欧美日韩一区二区| 欧美激情第三页| 日韩欧美国产综合一区| 国产精品视频看| 日本网站在线观看一区二区三区 | 777视频在线观看| 精品一区在线播放| 欧美成人网在线| 欧美军同video69gay| 91麻豆精品视频| 男女精品视频| 国产一区二区精品久| 国内精彩免费自拍视频在线观看网址| 国产网站av| 国产91沈先生在线播放| 99久久伊人精品影院| 欧美超级乱淫片喷水| 日韩亚洲欧美成人一区|