當前**在工作當中沒有太大的含義,但是對於大家理解協程的基礎概念是相當有好處的協程最直接的可以理解為程式當中乙個沒有返回的功能塊兒
我們之前有學過多執行緒,所謂的多執行緒不論是非同步併發,還是併發強調的時候將功能放到不同的執行緒上分別執行的過程
但是協程不是這樣的,協程強調的是在同乙個執行緒上進行執行,這樣免去了執行緒生產、消費、拋棄的損耗
站在生產消費者模式來看
多執行緒主張的是
生產者生產
生產的內容放入快取
然後取出使用
協程的主張是生產者生產
然後生產函式終止
然後消費函式啟動
消費完成接著生產
閒話不多說,上**。
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...