因此,我正在构建一个长期运行的查询Web应用程序以供内部使用。
我的目标是拥有一个带有守护进程的flask应用程序,该守护进程在服务器启动时启动,它将更新全局字典对象。
我不一定要发布任何示例代码,因为我尝试了许多方法,但都没有成功。
守护程序将创建一个线程池(multiprocessing.Pool)以遍历所有数据库实例,并对它们运行几个查询。
看来,无论我如何尝试实施(现在,使用flask开发服务器),它都将锁定应用程序,并且在运行时无法执行任何其他操作。我曾尝试阅读大量文档,但通常还是会假设很多其他知识,但最终我不知所措。
我想知道是否有人可以提供一些指导,即使是在我可以找到的地方,因为我到处搜索了“烧瓶启动例程”和类似的东西,但没有发现任何用处。看来,当我将其部署到服务器上时,也许可以在.wsgi文件中定义一些启动守护程序,但是在那之前还有什么方法可以在本地执行此操作?当我将其推出以用于一般用途时,这甚至是正确的方法吗?
否则,我只是在考虑建立一个cron作业,该作业连续运行一个python脚本来执行我需要的查询,然后转储到MongoDB实例或其他东西,以便客户端可以从中进行提取(就像执行所有查询一样)在Flask应用程序的服务器端只是锁定了服务器,因此无法执行其他操作-aka:无法对信息采取行动,杀死spids等)
任何帮助都将极大地帮助我,我的大脑已经旋转了好几天。
from flask import Flask
from celery import Celery
app = Flask(__name__)
app.config['CELERY_BROKER_URL'] = 'amqp://guest@localhost//'
app.config['CELERY_RESULT_BACKEND'] = 'amqp://guest@localhost//'
celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)
output = 0
@app.before_first_request
def init():
task = my_task.apply_async()
@app.route('/')
def hello_world():
global output
return 'Hello World! - ' + str(output)
@celery.task
def my_task():
global output
result = 0
for i in range(100):
result += i
output = result
if __name__ == '__main__':
app.run()
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个多脚本工具,它将采用 .sql 文件的参数并执行它。
我已经设置了一个简单的测试,仅在一个数据库上执行,但是语法每次都会给我带来问题。
DELIMITER $$
CREATE DEFINER=`a_user`@`%` PROCEDURE `a_procedure`(
IN DirectEmployeeID TEXT,
IN StartRange DATE,
IN EndRange DATE
)
BEGIN
SELECT aColumn
WHERE thisThing = 1;
END$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
需要明确的是,该脚本已经过测试,并且在通过时可以正常工作,如下所示:
mysql -uuser -p -hhost -Pport databaseName < file.sql
Run Code Online (Sandbox Code Playgroud)
也可以通过 mysql 工作台工作。
我在另一个网站上看到了这种类型的解决方案:
with conn.cursor() as cursor:
f = sys.argv[1]
file = open(f, 'r')
sql = " ".join(file.readlines())
cursor.execute(sql)
Run Code Online (Sandbox Code Playgroud)
这给了我一个 MySQL 语法错误:
pymysql.err.ProgrammingError: (1064, u"You have an error in your SQL syntax;
check the manual that corresponds to your MySQL …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过pymssql从python脚本执行与链接服务器通信的存储过程。手动运行时,SP可以工作,但是从python脚本运行时,出现以下错误:
(7391, 'The operation could not be performed because OLE DB
provider"SQLNCLI11" for linked server "DBLOG" was unable to begin a
distributed transaction.DB-Lib error message 20018, severity 16:
\nGeneral SQL Server error: Check messages from the SQL Server\n')
Run Code Online (Sandbox Code Playgroud)
我还没有找到任何在pymssql本身中引用此限制的内容。我不太确定从哪里开始。我使用pymssql做了大量工作,并且从未遇到任何连接问题,并且我已经验证了我使用的登录名具有足够的权限(甚至尝试使用SA)。
有任何想法吗?
谢谢!