任務物件
事件迴圈
特殊函式內部不能寫不支援非同步請求的模組,如time,requests...否則雖然不報錯但實現不了非同步
import asyncio
import time
start_time = time.time()
async def get_request(url):
await asyncio.sleep(2)
urls = [
'www.1.com',
'www.2.com',
]task_lst = # 任務物件列表
for url in urls:
c = get_request(url) # 協程物件
task = asyncio.ensure_future(c) # 任務物件
# task.add_done_callback(...) # 繫結**
loop = asyncio.get_event_loop() # 事件迴圈物件
loop.run_until_complete(asyncio.wait(task_lst)) # 註冊,手動掛起
# 執行緒池
import time
from multiprocessing.dummy import pool
start_time = time.time()
url_list = [
'www.1.com',
'www.2.com',
'www.3.com',
]def get_request(url):
time.sleep(2)
pool = pool(3)
pool.map(get_request,url_list)
print('總耗時:',time.time()-start_time)
from flask import flask
async with aiohttp.clientsession() as s: #生成乙個session物件
async with await s.get(url=url) as response:
page_text = await response.text()
print(page_text)
return page_text
urls = [
'','',
'',]tasks =
for url in urls:
c = get_page(url)
task = asyncio.ensure_future(c)
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
end = time.time()
print(end-start)
# 非同步執行!
# hello tom!
# hello bobo!
# hello jay!
# 2.0311079025268555
'''
aiohttp模組實現單執行緒+多工非同步協程
並用xpath解析資料
# 特殊函式:請求的傳送和資料的捕獲
# 注意async with await關鍵字
return page_text # 返回頁面原始碼
# **函式,解析資料
def parse(task):
page_text = task.result()
tree = etree.html(page_text)
msg = tree.xpath('/html/body/ul//text()')
print(msg)
urls = [
'','',
'',]tasks =
for url in urls:
c = get_request(url)
task = asyncio.ensure_future(c)
task.add_done_callback(parse) #繫結**函式!
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
end = time.time()
print(end-start)
import time
import requests
from multiprocessing.dummy import pool
start = time.time()
urls = [
'','',
'',]def get_request(url):
page_text = requests.get(url=url).text
print(page_text)
return page_text
pool = pool(3)
pool.map(get_request, urls)
end = time.time()
print('總耗時:', end-start)
# 實現非同步請求
# hello jay!
# hello bobo!
# hello tom!
# 總耗時: 2.0467123985290527
爬蟲接觸的模組有三個:
接觸了一下flask開啟伺服器
LINQ提公升效率的方法
1.使用延遲。1 延遲執行和立即執行 延遲執行不僅僅是linq to sql獨有的,基本上所有的linq都具有此特性,它能提高效率讓我們在適當的時間執行適當的查詢,如果在某些特殊的情況下不想使用此特性可以使用 tolist or toarray 方法讓該查詢立即執行。示例1 延遲執行01 north...
提公升爬蟲效率之執行緒池
一 使用flask模擬阻塞,利用執行緒池爬取資料 模擬flask pip install flask from flask import flask,render template 返回乙個模板檔案需要匯入render tamplate from time import sleep bobo def...
提公升工作效率的方法
有計畫地使用時間 設定的目標要明確 具體 有可實現性 區分優先順序以及輕重緩急 將每天的工作順序排列出來 每件事都有具體的時間結束點 聽從生理時鐘辦事 效果與效率之間進行選擇 區分緊急事務與重要事務 不要想成為完美主義者 學會拒絕 利用零碎時間 part one 建立時間管理觀念 工作時間愈長,效率...