在 Python 的 REST API 程序中以多进程方式调用方法而苦苦挣扎
Posted
技术标签:
【中文标题】在 Python 的 REST API 程序中以多进程方式调用方法而苦苦挣扎【英文标题】:Struggling with calling a method in a multiprocess way in my REST API program in Python 【发布时间】:2021-12-24 19:51:38 【问题描述】:我今年学习 Python,但我有一个糟糕的老师,我不知道如何在 windows 上的 rest api 程序中处理这个多进程的事情。因此,我有一个应用程序可以存储有关人员(医院的病人)的数据,并且我必须包含一个在后台对这些数据进行统计的方法。
from flask import Flask
from hospital_controller import hospital_api
from report_generator import statistic_reporting
import multiprocessing
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
print('Hello')
REPORT_GENERATOR_PID = multiprocessing.Queue()
if REPORT_GENERATOR_PID == 0:
statistic_reporting()
exit(0)
print(hospital_api)
app.register_blueprint(hospital_api)
app.run(host='0.0.0.0', port=5000, debug=True)
现在以这种方式,多进程调用被忽略(其他一切都很好,所以我正在运行其余的 api) 我尝试以不同的方式调用它,例如:
p = multiprocessing.Queue(target=statistic_reporting())
在这种情况下,statistic_reporting() 方法运行良好,但 API 服务器本身没有响应。 所以总而言之,我不能让这两个东西同时工作。如果有人可以帮助我,我将不胜感激。
【问题讨论】:
【参考方案1】:multiprocessing.Queue()
不会创建新进程,也不会接受 target 参数。您似乎有些困惑,确实需要阅读有关多处理的好教程。但是,值得一提的是,以下代码是启动后台进程的 Flask 应用程序示例。但是,我很遗憾我无法为您提供您似乎需要的完整的多处理教程。所以我不知道你会从中得到什么价值(如果有的话)。
from flask import Flask
from multiprocessing import Process
app = Flask(__name__)
def background_task():
import time
print('Background task started.')
time.sleep(5)
print('Background task ended.')
@app.route('/')
def hello_world():
Process(target=background_task).start()
return 'Hello World!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
【讨论】:
谢谢!如果 http 路由与给定路由匹配,则后台任务开始工作。你说得对,我对 Python 中的多处理一无所知,更重要的是,我对 Python 本身也有一点了解。被调用的类并没有真正做我想要的,但我想这是另一个问题,多进程部分已经完成。以上是关于在 Python 的 REST API 程序中以多进程方式调用方法而苦苦挣扎的主要内容,如果未能解决你的问题,请参考以下文章
您可以在 DTrace 中以多 CPU 安全的方式比较探针之间的值吗?