2016-07-22 4 views
3

플라스크에서 aiohttp로 이동 중이며 비동기를 지원하지 않는 Oracle 데이터베이스에서 일부 쿼리를 실행해야합니다. 그래서 어떻게 그 일을 할 수 있는지 궁금하네요?비동기를 지원하지 않는 라이브러리로 작업하는 방법은 무엇입니까?

어때요?

http://pastebin.com/nbWABbvK

또는 그렇게 다른 (오른쪽) 방법이?

미리 감사드립니다.

+0

모든 것이 비동기 할 필요가있다. asyncio없이 라이브러리를 사용할 수 있습니다. – dirn

+0

내 응용 프로그램이 다른 클라이언트에 대해 차단 될 수 있기 때문에 비동기식으로 처리해야합니다. –

답변

4

loop.run_in_executor 코 루틴은 정확히 작업을 수행합니다

result = await loop.run_in_executor(executor, sync_fn, *args) 

귀하의 예제를 사용 :

executor = ThreadPoolExecutor(max_workers=1) 

async def hello(request): 
    param1, param2 = get_params(request) 
    result = await app.loop.run_in_executor(executor, sync_fn, param1, param2) 
    return web.Response(text=result) 
+0

예, 이해하고 있지만 이해할 수 없습니다. 예를 들어 aiohttp를 사용하고 있습니다. –

+0

@Howtochangeusername 내 편집을 참조하십시오. – Vincent

+0

앱 루프를 사용해야하며 새 앱을 만들지 않으시겠습니까? 그리고 executor로 None을 전달하면 소스 코드를 읽었습니다. 5 명의 작업자와 함께 나를 위해 threadpoolexecuter를 생성합니다! –