2017-09-23 3 views
1

파이썬 여기에 3.6aiohttp 및 firebase 및 firebase-admin - 비 차단입니까? 파이썬 3.6

는 사용자가 중포 기지에 있는지 확인합니다 나의 중포 기지 코드 :

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

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

내 질문은 : 여기

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입니다 getIsUser (uid = uid)가 블로킹하거나 블로킹하지 않는 경우. 차단하는 경우 차단을 해제하려면 어떻게해야합니까?

답변

3

예, getIsUser은 차단 호출입니다. 스레드 풀에서

실행을 : loop = asyncio.get_event_loop() is_user = loop.run_in_executor(None, getIsUser, uid)

0

나는 앤드류의 대답과는 다른 접근 방식을 제안한다. 제 의견으로는 스레드를 열면 응용 프로그램 코드가 복잡해지고 버그가 추적됩니다.

asyncio을 지원하는 라이브러리가있을 때까지 aiohttp과 비동기 적으로 호출하는 REST API를 사용해야합니다.

auth 나는 데이터베이스 사용을 권장하지 않으므로 더 이상 권장되지 않지만 지금은 작동합니다.