烧瓶子进程无法看到数据库中的更改



我使用带有长时间运行的工作进程的 Flask 应用程序,并且此过程看不到数据库中的更改。

main.py

在此文件中,我创建了 Flask 应用程序并开始该过程。

from paas.app_factory import create_app()
app = create_app()
from .controllers.resource_controller import *
from .worker import create_resource, delete_resource
from multiprocessing import Process
from flask import current_app
with app.app_context():
create_proc = Process(target=create_resource, args=(current_app._get_current_object(),)).start()

worker.py

worker每20秒检查一次数据库中是否出现了新资源,如果是,它将处理它们

def create_resources(app):
with app.app_context():
while True:
resource = get_resource_to_create()
if not resource:
print("Wait for resource to create...")
time.sleep(20)
continue
create_resource.....

resource_controller.py

应用程序启动后,我向数据库添加了一些资源。问题是,通过第二条路由,我可以从数据库获取资源,但 worker.py 数据库中看不到任何东西。

from .main import app
@app.route('resource/<resource>', method=POST)
create_resource():
write_resource_to_db(resource)
@app.route('resources')
get_resources():
select_all_resources_from_db()

我相信我这边对应用程序上下文有一些误解,但我无法弄清楚。帮助会非常好。

提前谢谢你。

附言假设get_resource_to_create()select_all_resources_from_db()内部是相同的功能。

问题出在

def create_resources(app):
with app.app_context():
while True:

循环在一个事务中位于应用程序上下文 == 中,因此它的工作方式如下:

START TRANSACTION;
SELECT ...;
SELECT ...;
SELECT ...;
...

所以没有机会获得新的数据。

如果我切换线路,

def create_resources(app):
while True:
with app.app_context():

然后,在一个周期结束后,有一个带有新数据的提交和新事务。

START TRANSACTION;
SELECT ... ;
COMMIT;
START TRANSACTION;
SELECT ... ;
COMMIT;
...

相关内容

  • 没有找到相关文章

最新更新