IT/python

python requests 비동기식으로 호출하는 방법 (asyncio / aiohttp)

하모니카신나게불어요 2023. 7. 6. 17:39

과거 정산기 프로그램을 만들 때 정산기 결제창이 뜰 때

 

프로그램이 멈춰버리는 현상 때문에 고생 좀 했었다.

 

알아보니 정산기 프로그램도 포커스를 잡고있고 결제창도 포커스를 잡으려니 충돌하는 이유이다.

 

결제창을 api로 호출할 때 비동기식으로 호출하면 이러한 문제를 피할 수 있다.

 

 

pip install asyncio
pip install aiohttp

https://pypi.org/project/asyncio/

 

asyncio

reference implementation of PEP 3156

pypi.org

https://pypi.org/project/aiohttp/2.3.8/

 

aiohttp

Async http client/server framework (asyncio)

pypi.org

 

 

API 호출에 requests를 사용할 때 asyncio / aiohttp를 버무려 쓰면 된다.

ex)

r = asyncio.run(testrequests(url))

async def api_pay(self, url, amount):
    headers = {headers}
    data = {data}
    async with aiohttp.ClientSession() as session:
        async with session.post(url, data=data, headers=headers) as response:
            res = await response.read()
    return r

이런 식으로 해서 살을 붙여서 사용하면 된다.

 

백그라운드상에서 보면 메인으로 잡고있는 것들이 있어서 충돌을 방지하는 것이 좋다.

 

 

 

 

 

 

 

 

728x90