我正在使用Python
和Flask
作为服务器的一部分。当服务器启动时,它连接到Oracle
数据库和Binance Crypto Exchange
服务器
服务器以TEST
orPRODUCTION
模式启动。为了确定启动时使用的模式,我取了一个input variable
,然后用它来确定是否连接到 PROD 配置(实际上会执行交易)和 TEST 系统(更像是一个沙盒)
每当我调用服务器(例如:)http://<myservername.com>:80/
时,似乎每次调用都会执行服务器连接。因此,如果我输入 http://<myservername.com>:80/ 7 次,连接到数据库的代码(以及连接到 Binance 服务器的代码)将执行七次。
问题:有没有地方可以放置连接代码,以便在服务器启动时执行一次?
我看到了以下内容:
并尝试使用 #2 中的解决方案
@app.before_first_request
def do_something_only_once():
代码已更改,因此具有以下内容(未显示与 Binance 服务器的连接):
@app.before_first_request
def do_something_only_once():
system_access = input(" Enter the system access to use \n-> ")
if ( system_access.upper() == "TEST" ) :
global_STARTUP_DB_SERVER_MODE = t_system_connect.DBSystemConnection.DB_SERVER_MODE_TEST
print(" connected to TEST database")
if ( system_access.upper() == "PROD" ) :
global_STARTUP_DB_SERVER_MODE = t_system_connect.DBSystemConnection.DB_SERVER_MODE_PROD
print(" connected to PRODUCTION database")
启动服务器时,我从来没有机会输入“TEST”(为了连接到“TEST”数据库)。实际上,区域下的代码:
@app.before_first_request
def do_something_only_once():
永远不会被执行。
问题:如何修复代码,以便在服务器启动时,负责连接Oracle DB服务器和连接Binance服务器的代码只执行一次,而不是每次使用http访问服务器时执行:/ /<myservername.com>:80/
任何帮助、提示或建议将不胜感激
TIA
@Christopher Jones 感谢您的回复。
我希望做的是拥有这个Flask server implemented as a Docker process
。这个想法是一次启动其中的几个过程。然后,该组Docker Processes
将由某种Dispatcher
. 当执行http://myservername.com:80/命令时,连接信息将首先转到将Dispatcher
其转发给“免费”使用的 Docker 进程。我的想法是Docker Swarm(或Kubernetes下的东西)可能以这种方式工作(?):一个进程与数据库建立一个连接(并且调度程序将负责分配工作)。
我来自 ERP 背景。的存在Oracle Connection Pool
是已知的,但它被选为将大部分工作转移到操作系统处理级别(因为如果运行“ps -ef | grep <process_name>”,他们将看到“调度程序”将转发工作)。所以,我一直在寻找类似的东西 - 旧习惯很难改掉......