python은 어떻게 파충류의 효율을 향상시킬 것인가
작업 대상은 시간 순환 대상에 등록해야 합니다
작업 대상에 귀속 리셋: 파충류 데이터 분석 중
이벤트 순환 대상을 시작할 때, 저장된 작업 대상은 비동기적으로 실행된다
requests -- aiohttp
import asyncio
import time
start_time = time.time()
async def get_request(url):
await asyncio.sleep(2)
print(url,' !')
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(...) #
task_lst.append(task)
loop = asyncio.get_event_loop() #
loop.run_until_complete(asyncio.wait(task_lst)) # ,
스레드 풀 + requests 모듈
#
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):
print(' ...',url)
time.sleep(2)
print(' !',url)
pool = Pool(3)
pool.map(get_request,url_list)
print(' :',time.time()-start_time)
두 가지 방법으로 파충류의 효율을 향상시키다flask 서버 만들기
from flask import Flask
import time
app = Flask(__name__)
@app.route('/bobo')
def index_bobo():
time.sleep(2)
return 'hello bobo!'
@app.route('/jay')
def index_jay():
time.sleep(2)
return 'hello jay!'
@app.route('/tom')
def index_tom():
time.sleep(2)
return 'hello tom!'
if __name__ == '__main__':
app.run(threaded=True)
aiohttp 모듈 + 단일 스레드 다중 작업 비동기 협동
import asyncio
import aiohttp
import requests
import time
start = time.time()
async def get_page(url):
# page_text = requests.get(url=url).text
# print(page_text)
# return page_text
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 = [
'http://127.0.0.1:5000/bobo',
'http://127.0.0.1:5000/jay',
'http://127.0.0.1:5000/tom',
]
tasks = []
for url in urls:
c = get_page(url)
task = asyncio.ensure_future(c)
tasks.append(task)
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
'''
import aiohttp
import asyncio
from lxml import etree
import time
start = time.time()
# :
# async with await
async def get_request(url):
async with aiohttp.ClientSession() as s:
async with await s.get(url=url) as response:
page_text = await response.text()
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 = [
'http://127.0.0.1:5000/bobo',
'http://127.0.0.1:5000/jay',
'http://127.0.0.1:5000/tom',
]
tasks = []
for url in urls:
c = get_request(url)
task = asyncio.ensure_future(c)
task.add_done_callback(parse) # !
tasks.append(task)
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
end = time.time()
print(end-start)
requests 모듈 + 스레드 탱크
import time
import requests
from multiprocessing.dummy import Pool
start = time.time()
urls = [
'http://127.0.0.1:5000/bobo',
'http://127.0.0.1:5000/jay',
'http://127.0.0.1:5000/tom',
]
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
작은 매듭requests 모듈 + 스레드 탱크
urllib
aiohttp
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.