gpt4 book ai didi

python - 为什么 firebase_admin 在运行多进程时无法解析

转载 作者:太空宇宙 更新时间:2023-11-03 19:57:44 30 4
gpt4 key购买 nike

我有一个使用 python firebase_admin SDK 的 Tornado 应用程序。当我在单个进程中运行时:

console_server = tornado.httpserver.HTTPServer(ConsoleApplication())
console_server.listen(options.console_port, options.bind_addr)
tornado.ioloop.IOLoop.instance().start()

firebase_admin 工作正常。但是当我将其更改为在多进程中运行时:

console_server = tornado.httpserver.HTTPServer(ConsoleApplication())
console_server.bind(options.console_port, options.bind_addr)
console_server.start(4)
tornado.ioloop.IOLoop.instance().start()

最后一行卡住了:

if (not len(firebase_admin._apps)):
cred = ...
self.app = firebase_admin.initialize_app(cred)
self.app = firebase_admin.get_app()
self.db = firestore.client()
...
ref = self.db.document(USER_DOC.format(org, value))
user_ref = ref.get()

似乎 get() 没有得到解决,因为我没有得到任何异常。

有人知道为什么会发生这种情况,或者至少知道如何调试它吗?

最佳答案

多进程分支(即 start(4) 调用)必须在应用程序的生命周期中很早出现。特别是,大多数接触网络的东西必须出现在 fork 之后(bind() 是少数异常(exception)之一,在这种情况下必须出现在 fork 之前)。

您(可能)需要重新组织事物,以便在 fork 后创建 firebase 应用程序。如果您使用 HTTPServer.start 方法,这可能会很烦人,因此您可能想转而直接调用 tornado.process.fork_processes() (这已记录在案)作为“高级多进程”模式)。

关于python - 为什么 firebase_admin 在运行多进程时无法解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59452533/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com