在 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 程序中以多进程方式调用方法而苦苦挣扎的主要内容,如果未能解决你的问题,请参考以下文章

在 NestJS 中以多对一关系添加字段

如何在 Spark SQL 中以多列为中心?

您可以在 DTrace 中以多 CPU 安全的方式比较探针之间的值吗?

在java中以多线程方式插入或更新数据库中的多条记录

如何在 Spring Boot Rest API 中以 XML 形式返回对象列表

mac 以多tab的方式打开