併發程式設計
python中實現併發程式設計的三種方案:多執行緒、多程序和非同步i/o。併發程式設計的好處在於可以提公升程式的執行效率以及改善使用者體驗;
程序和執行緒的區別和聯絡
程序 - 作業系統分配記憶體的基本單位 - 乙個程序可以包含乙個或多個執行緒
執行緒 - 作業系統分配cpu的基本單位
併發程式設計(concurrent programming)
提公升執行效能 - 讓程式中沒有因果關係的部分可以併發的執行
改善使用者體驗 - 讓耗時間的操作不會造成程式的假死
python中有乙個名為aiohttp的三方庫,它提供了非同步的http客戶端和伺服器,這個三方庫可以跟asyncio模組一起工作,並提供了對future物件的支援。python 3.6中引入了async和await來定義非同步執行的函式以及建立非同步上下文,在python 3.7中它們正式成為了關鍵字。
asyncio 是幹什麼的?
非同步網路操作
併發協程。
下面的**非同步的從5個url中獲取頁面並通過正規表示式的命名捕獲組提取了**的標題。
import asyncio #非同步io
import re #引入正則
import aiohttp #aiohttp則是基於asyncio實現的http框架
pattern = re.compile(r'\(?p.*)\<\/title\>')
async def fetch_page(session, url):
#@asyncio.coroutine
#def fetch_page(session,url)
async with session.get(url, ssl=false) as resp:
return await resp.text()
#return yield from resp.text()
#把@asyncio.coroutine替換為async;
#把yield from替換為await。
#我們建立了乙個 clientsession 物件命名為session,然後通過session的get方法得到乙個 clientresponse 物件,命名為resp,get方法中傳入了乙個必須的引數url,就是要獲得原始碼的http url。至此便通過協程完成了乙個非同步io的get請求。
html = await fetch_page(session, url)
#html = yield from fetch_page(session,url)
print(pattern.search(html).group('title'))
def main():
urls = ('',
'','',
'','')
loop = asyncio.get_event_loop()
tasks = [show_title(url) for url in urls]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
loop.run_until_complete(coroutine)
loop = asyncio.get_event_loop() # 建立乙個事件loop
tasks = [show_title(url) for url in urls] # 這裡是乙個協程物件,這個時候show_title並沒有執行
loop.run_until_complete(asyncio.wait(tasks)) #將協程加入到事件迴圈loop
loop.close()
if __name__ == '__main__':
main()
linuxC學習第十八天
int main int count 0 int length 0 int i,t 0 while 1 break case 3 刪除資訊 printf 刪除第幾個 n scanf d t for i t i length i length break default 無效的按鍵 printf 無效...
JAVA學習第十八天
今天學習的主要內容是正規表示式 一 使用場景 1 網頁上使用者輸入資料的時候,用於格式校驗,例如 身份證,郵箱,號碼,手機號碼,使用者名稱 登入名,密碼 2 用於與第3方系統進行資料格式校驗,因為第3方的系統不一定給你的資料,就是符合你要求的資料 3 用於從資料庫中匹配符合格式的資料 二 正規表示式...
第十八天部落格
首先是複習 複習昨天學習的19個選擇器 加上清除是20個選擇器 基本選擇器5個 id選擇器 id 類選擇器 樣式名稱 選擇器 元素選擇器 標籤名稱 組選擇器 id,class,標籤名稱 層次選擇器4個 選擇父元素中的某些元素 父元素 子元素 選擇父元素中所有的子元素,不包括後代元 父元素 子元素 選...