2017-09-23 102 views
1

蟒蛇3.6aiohttp和firebase和firebase-admin - 是不是阻止?蟒蛇3.6

這裏是我的火力點代碼,如果用戶對火力的存在,將檢查:

import firebase_admin 
from firebase_admin import credentials 
from firebase_admin import auth 


cred = credentials.Certificate('wow.json') 
default_app = firebase_admin.initialize_app(cred) 

def getIsUser(email=None,uid=None): 
     try: 
      user = auth.get_user(uid) 
      is_user = True 
     except: 
      is_user = False 

    return is_user 

這裏是我的aiohttp調用該函數:

async def jwt_route(request): 
    data = await request.json() 
    uid = data['uid'] 
    is_user = getIsUser(uid=uid) 

app.router.add_post('/jwt', jwt_route) 

我的問題是如果getIsUser(uid = uid)阻塞或不阻塞。如果阻塞,那麼我如何使其無阻塞?

回答

3

是的,getIsUser是一個阻塞呼叫。

運行它的線程池: loop = asyncio.get_event_loop() is_user = loop.run_in_executor(None, getIsUser, uid)

0

我建議從安德魯的回答不同的方法。 在我看來 - 開放線程會使應用程序代碼和跟蹤錯誤複雜化。

在有支持asyncio的庫之前,您應該使用REST API,與aiohttp異步調用它。

對於auth我正在使用DEPRECATED的數據庫祕密,所以它並不理想,但它現在可行。