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의 차이점을 알아보겠습니다.