2016-07-22 61 views
3

我正在從瓶子移動到aiohttp,我需要在不支持異步的Oracle數據庫中執行一些查詢。所以我想知道如何在aiohttp中做到這一點?如何使用不支持異步的庫?

這個怎麼樣?

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

我必須使用應用程序循環,而不是創建新的? 我讀過源代碼,如果我將通過None作爲執行者,它將爲我創建5個工作者的threadpoolexecuter! –