Python協程理解 基於爬蟲舉例

2022-05-14 16:06:09 字數 2352 閱讀 9363

當前**在工作當中沒有太大的含義,但是對於大家理解協程的基礎概念是相當有好處的

協程最直接的可以理解為程式當中乙個沒有返回的功能塊兒

我們之前有學過多執行緒,所謂的多執行緒不論是非同步併發,還是併發強調的時候將功能放到不同的執行緒上分別執行的過程

但是協程不是這樣的,協程強調的是在同乙個執行緒上進行執行,這樣免去了執行緒生產、消費、拋棄的損耗

站在生產消費者模式來看

多執行緒主張的是

生產者生產

生產的內容放入快取

然後取出使用

協程的主張是

生產者生產

然後生產函式終止

然後消費函式啟動

消費完成接著生產

閒話不多說,上**。

1

#coding:utf-8

2import

requests

3from time import

sleep

4from lxml import

etree56

defsetup(fun):

7"""

8啟動生成器

9:param fun: 生成器函式

10"""

11def inner(**kwargs):

12 k = fun(**kwargs) #

呼叫生成器

13 next(k) #

執行一次,效果類似初始化

14returnk15

return

inner

1617

@setup

18def

getsrc():

19"""

20根據內容獲取鏈結

33根據位址獲取內容

34:return:

35"""

36while

true:

37 url = "

"38 page = yield

url39

if page == 1:

40 referer = "

"41 url = "

/pic/"42

else

:43 referer = url%page

44 url = url %page

45print

(url)

46 headers =

50 request_data = requests.get(url = url,headers =headers)

51 content =request_data.content

52 img =getsrc()

53img.send(content)

54 sleep(1)

5556

defgetpage():

57"""

58啟動,獲取所有的頁碼

59"""

60 d =getdata()

61 page =0

62while page < 35:

63 page += 1

64d.send(page)

6566

if__name__ == "

__main__":

67 getpage()

python 協程 爬蟲

協程 又叫微執行緒 python的多執行緒沒法利用多核,只能用乙個核去切換,沒辦法實現真正的並行效果。多執行緒的意義,對於io密集型是有意義的。大部分處理都是io的,多執行緒是可以解決大多數情況的。但是解決不了並行的多程序。協程 非搶占式的程式,執行緒和程序都是搶占式的。協程也是要切換的,不過這種切...

python 協程 理解

協程的使用依賴於gevent 它封裝了greenlet 在使用的時候 主要是切斷當前程式執行,然後當收到訊號再次執行程式。在中斷中可以進行其它任務。程式import gevent def foo print running in foo gevent.sleep 0 print explicit c...

多協程爬蟲

要實現非同步的爬蟲方式的話,需要用到多協程。同步的爬蟲方式爬取這8個 import requests,time 匯入requests和time start time.time 記錄程式開始時間 url list 把8個 封裝成列表 for url in url list 遍歷url list r r...