한 줄에 python3 코드 속도를 높이는 방법
8650 단어 pythontutorialefficiencyasyncio
다음은 속도를 높일 수 있는 예제 코드입니다. 이것은 asyncio의 요점을 증명하기 위한 기본 예제입니다. Google에 요청을 보내고 응답을 반환합니다. 우리는 이것을 32번 할 것이고 얼마나 걸리는지 볼 것입니다.
import requests
from time import time
def task(url):
""" a simple task to return the response of a given url
:param url: {str} -- url to send requests
:return: Response object from requests
"""
return requests.get(url, headers={'User-Agent':'Chrome; Python'})
# timing execution
start = time()
# create list to store Response objects
responses = []
for _ in range(0, 32):
# add Response to list
responses.append(task('https://www.google.com'))
print(f'{time()-start} to get all responses')
산출:
2.498640775680542 to get all responses
이제 asyncio를 사용하여 한 번에 16개의 응답을 검색하도록 이 예제를 업데이트할 것입니다. 이것은 16으로 설정한
max_async_pool
변수에 의해 결정됩니다. 이것은 원하는 속도와 시스템 리소스에 따라 증가하거나 감소할 수 있습니다.import requests
from time import time
from modutils import aioloop
def task(url: str):
""" a simple task to return the response of a given url
:param url: {str} -- url to send requests
:return: Response object from requests
"""
return requests.get(url, headers={'User-Agent': 'Chrome; Python'})
# timing execution
start = time()
# create a list of arguments for the task function
args = [['https://www.google.com'] for _ in range(0, 32)]
# sending 16 requests at one time by setting max_async_pool to 16
# responses is a list of Response objects
responses = aioloop(task, args, max_async_pool=16)
print(f'{time()-start} to get all responses')
산출:
0.2680017948150635 to get all responses
aioloop
의 modutils
함수를 사용하여 코드 속도를 높이고 2초가 걸리는 것을 거의 즉시 만들 수 있었습니다.참고: aioloop 함수의 경우 각 내부 항목을 주어진 함수로 압축 해제하는 args 목록을 만들었습니다. 인수 목록에 사전을 사용하여 명명된 인수를 추가할 수도 있습니다. 아래 예:
import requests
from time import time
from modutils import aioloop
def task(url: str, params: dict=None):
""" a simple task to return the response of a given url
:param url: {str} -- url to send requests
:param params: {dict} -- optional named argument for requests parameters
:return: Response object from requests
"""
return requests.get(url, headers={'User-Agent': 'Chrome; Python'}, params=params)
# timing execution
start = time()
# create a list of arguments for the task function
args = [['https://www.google.com', {'params':{'q':'testing'}}] for _ in range(0, 32)]
# sending 16 requests at one time by setting max_async_pool to 16
# responses is a list of Response objects
responses = aioloop(task, args, max_async_pool=16)
print(f'{time()-start} to get all responses')
modutilshere에 대해 자세히 알아보십시오.
Reference
이 문제에 관하여(한 줄에 python3 코드 속도를 높이는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tannerburns/how-to-speed-up-python3-code-in-one-line-2i11텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)