【发布时间】:2022-01-23 23:30:54
【问题描述】:
下面是我的烧瓶,多处理代码。如果我执行,我会打印两次“成功打开数据库”。如果我让 debug = True,我得到它三次。请帮助我了解我哪里出错了。
from flask import Flask
from multiprocessing import Manager
import sqlite3 as sql
app = Flask(__name__)
db_path = "D:/abc.db"
# reading the database
conn = sql.connect(db_path)
print ("Opened database successfully")
@app.route('/')
def func():
print("Hello")
## Instantiating Managers
manager = Manager()
return_list1 = manager.list()
return_list2 = manager.list()
return {}
if __name__=='__main__':
app.run(debug = False, port=5003)
【问题讨论】:
-
所有不在
if __name__ == '__main__':内的代码都将运行两次(您不需要将函数和类定义放在那里,因为它们不会被定义调用) -
1.为什么会运行两次?任何想法? 2. 我放代码的动机是使不可序列化的变量可用于所有服务方法。有没有其他方法可以做到这一点?
-
它不一定会运行两次,它会随着新进程的启动而运行多次。为什么?因为每个新进程几乎只是运行同一个文件,可能是因为您将它设置为有一个目标,但该目标必须在同一个文件中定义,因此它重新运行整个代码并使用该名称。此外,内存不在进程之间共享,因此您不能这样做,将直接执行的所有内容放在
if name == main下,为了共享您需要使用管理器的数据(还有其他东西)并将其作为参数传递.以及为什么你还是要使用管理器?
标签: python flask multiprocessing