python - Python Flask 服务未并行执行所有函数调用
问题描述
我是 Python 新手,我正在尝试创建一个服务。
我已经使用 Flask 创建了一个服务,它对串行请求运行良好,但是当多个请求到来时,它会表现出一些奇怪的行为。在我的实际应用程序中,我观察到当多个请求频繁出现时,其他调用等待第一个调用完成,然后它们并行执行。
我试图重现这种行为并取得了一些成功。
这是示例代码:
from flask import Flask
from waitress import serve
import datetime
import pandas as pd
app = Flask(__name__)
@app.route("/get_data/")
def get_data():
print("Request received at: " + str(datetime.datetime.now()))
file_path = "D:\15MB_Data.csv"
t1 = datetime.datetime.now()
data_frame = pd.read_csv(file_path, ",")
print("Starting processing after reading file at: " + str(datetime.datetime.now()))
doSomeHeavyWork()
t2 = datetime.datetime.now()
init_time = 'Time in Initialization : ' + str((t2 - t1)) + ". Completed at " + str(datetime.datetime.now())
print(init_time)
return init_time
def doSomeHeavyWork():
current_time_plus5 = datetime.datetime.now() + datetime.timedelta(0, 5)
while datetime.datetime.now() < current_time_plus5:
i = 0
return 1
serve(app, host="0.0.0.0", port=5002)
要调用我使用的get_data函数:
http://127.0.0.1:5002/get_data
这个示例代码的输出是:
Request received at: 2021-11-10 15:26:32.482249
Starting processing after reading file at: 2021-11-10 15:26:32.875022
Request received at: 2021-11-10 15:26:33.112884
Request received at: 2021-11-10 15:26:33.485669
Request received at: 2021-11-10 15:26:33.804485
Starting processing after reading file at: 2021-11-10 15:26:36.032274
Starting processing after reading file at: 2021-11-10 15:26:36.438055
Starting processing after reading file at: 2021-11-10 15:26:37.089661
Time in Initialization : 0:00:05.444947. Completed at 2021-11-10 15:26:37.927196
Time in Initialization : 0:00:07.936492. Completed at 2021-11-10 15:26:41.049376
Time in Initialization : 0:00:08.023461. Completed at 2021-11-10 15:26:41.509130
Time in Initialization : 0:00:08.302279. Completed at 2021-11-10 15:26:42.120756
在输出中您可以清楚地看到,第二个请求是在2021-11-10 15:26:33.112884收到的,但它在2021-11-10 15:26 :36.032274开始处理,其他调用也一直在等待。
我在 Windows 10 上使用 pycharm 进行开发。我认为这可能是由于开发环境的原因,所以我尝试在 Ubuntu 上托管应用程序,也使用 Nginx,但仍然没有运气。
谁能让我知道在不等待第一次调用完成的情况下我应该怎么做才能执行这些请求?
解决方案
推荐阅读
- html - 如何使用花括号作为 Div 的左右边界
- php - get_the_date 调用未在循环中填充
- reactjs - 活动类在 react-router-dom 库的 NavLink 中不起作用
- angular - 如何在 Angular Material 中创建 Bootstrap 'input-group-text'
- c - 如何在 GTK 中获得锁定的最大化窗口?
- swift - 为什么“someVariable”变量的值在下面的代码中没有改变
- pybind11 - 如何部署使用 pybind11 的应用程序?
- python-3.x - Python 多处理:dict() 中的 set() 不起作用
- node.js - 请求正文解码问题中的 Firebase 存储桶/axios url
- sorting - 使用属性类型 Date 值对集合进行排序