python async thread

cndls6768·2022년 11월 1일
0
post-thumbnail

python에서 async 함수를 thread로 불러 오려고 했다.
알아보니 async가 이미 비동기 처리를 지원하기 때문에 async함수를 thread로 돌리려고 하니 오류가 생겼다. async가 비동기처리를 한다는 것까지 는 알고 있었지만 정확히 뭔지 몰라서 일어난 일 같다. 그래서 thread와 async에 차이점이 뭔지 어떻게 사용할 수 있는지에 대해 알아볼려고 한다.

실수 코드

일단 내가 어떤 형식으로 쓰려고 했는지 부터 기록하고자 한다.

import asyncio
import websockets
from threading import Thread

async def device(websocket,data):
    print(data)

async def Main(websocket, path):
    data = await websocket.recv()
    if(data == 0):
        t1 = Thread(target=device, args=(websocket,data))
        t1.start()
        t1.join()

start_server = websockets.serve(Main, "0.0.0.0", 5050)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

이런 방식으로 실행 하고자 했다.
다시 보니 너무 생각없이 코드를 작성한 것 같다.

해결 방법

async함수를 실행 하는 방법을 await 함수()이런 방식으로 밖에 할 수 있는 줄 알았다. send_t = asyncio.create_task(함수()) 이렇게 비동기로 실행이 가능하다... 진작에 알았으면 좋았을 텐데 async예제가 await 함수()이 방식만 있다.

혹시나 이 블로그를 보시는 분들중에서 thread에서 async를 무조건적으로 실행을 해야하는 경우라면
https://velog.io/@rorhcdream/python-asyncio-with-threads
여기를 한번 확인해 보세요. thread로 async 함수를 실행할 수 있는 방법에 대해서 나와있습니다. 저는 이렇게 구현하고 싶지 않아서 하지 않은 방법입니다. 혹시 모르니 링크 남겨 두겠습니다.

어쨋든 실수에 대해서 적는건 여기까지 하고 thread와 async의 차이점을 알아보겠습니다.

profile
항상 새로운 도전을 하고 있습니다.

0개의 댓글