Python 2.7 Python导入firebase模块导致程序意外循环
我使用的是Python2.7和PythonFirebase 1.2 如果我们评论firebase导入,那么它只给出一次输出,或者多次给出输出Python 2.7 Python导入firebase模块导致程序意外循环,python-2.7,firebase,Python 2.7,Firebase,我使用的是Python2.7和PythonFirebase 1.2 如果我们评论firebase导入,那么它只给出一次输出,或者多次给出输出 from firebase import firebase print "result" 输出: result result result result 那个firebase模块是由糟糕的程序员编写的,因为它执行的任务不是您明确要求的。出于这个原因,我建议任何人都不要使用该模块,因为你无法知道他们的代码中可能还有什么其他陷阱。当然,他们可能认为这种行
from firebase import firebase
print "result"
输出:
result
result
result
result
那个
firebase
模块是由糟糕的程序员编写的,因为它执行的任务不是您明确要求的。出于这个原因,我建议任何人都不要使用该模块,因为你无法知道他们的代码中可能还有什么其他陷阱。当然,他们可能认为这种行为是方便的,但方便就是一切,只是打破了程序员的期望(这是每个模块编写者必须遵守的一条规则),如果方便的话,这个问题就不存在了。他们确实说它严重依赖于多处理,但他们没有提到你在这方面没有发言权:
当出现并发时,接口严重依赖于标准多处理库。创建异步调用时,会创建一个按需进程池,异步方法由池中的一个空闲进程执行。池将保持活动状态,直到主进程死亡。因此,每次触发异步调用时,您总是使用相同的池。当方法返回时,池进程将返回值发送回提供的回调函数中的主进程
所以,所有这些话。。。这是因为该模块的主\uuuuu init\uuuuuuuuuy.py
导入了其异步.py
模块,该模块又创建了一个多处理.Pool
(设置为其\uprocess\upool
)和5个固定插槽,并且如果不使用它,您将获得主脚本的5个额外进程-因此,它打印出result
6次(主进程和5个子进程)
底线-不要使用此模块。还有其他选择,但是如果您必须使用主进程检查来保护您的代码:
if __name__ == "__main__":
print("result")
它仍然会生成5个子进程,并等待它们全部完成(这相当快),但至少不会执行您的保护代码。I将async.py文件中的值从5修改为0。执行后,它仍然会给出6次输出。请帮助我们您没有更改正确的文件,因为multiprocessing.Pool
会抱怨最小工作人数为1
。阻止它的唯一方法是使用如上所述的防护-是的,它仍然会产生不需要的进程,但至少它不会执行任何操作(可能会改变模块的愚蠢行为并使其无法使用),无论哪种方式,都不要改变模块的行为,改变模块!例如,我们尝试了Pyfirebase。但是如果我们想使用firebase应用程序,我们如何从Pyfirebase模块使用它。firebase_2=firebase。firebase应用程序(“”,无)它使用firebase。我们如何使用Pyfirebase使用相同的firebase应用程序。请帮助我们