aiohttp 和 firebase 以及 firebase-admin - 它是非阻塞的吗? python 3.6

aiohttp and firebase and firebase-admin - is it non blocking? python 3.6

python 3.6

这是我的 firebase 代码,它将检查用户是否存在于 firebase 上:

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) 是否阻塞。如果阻塞,那么如何使其成为非阻塞?

是的,getIsUser 是阻塞调用。

运行 它在线程池中: loop = asyncio.get_event_loop() is_user = loop.run_in_executor(None, getIsUser, uid)

我建议采用与 Andrew 的回答不同的方法。 在我看来 - 打开线程会使应用程序代码和跟踪错误复杂化。

直到有一个库支持 asyncio,你应该使用 REST API,用 aiohttp.

异步调用它

对于auth,我使用的是已弃用的数据库机密,因此它并不理想,但现在可以使用。