首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python服务没有并行执行所有函数调用

Python服务没有并行执行所有函数调用
EN

Stack Overflow用户
提问于 2021-11-10 10:17:30
回答 1查看 96关注 0票数 1

我是Python新手,我正在尝试创建一个服务。

我使用Flask创建了一个服务,它可以很好地处理串行请求,但是当出现多个请求时,它会显示出一些奇怪的行为。在我的实际应用程序中,我观察到的是,当多个请求频繁出现时,其他调用等待第一个调用完成,然后并行执行。

我试图复制这种行为,并取得了一些成功。

下面是示例代码:

代码语言:javascript
复制
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函数:

代码语言:javascript
复制
http://127.0.0.1:5002/get_data

此示例代码的输出是:

代码语言:javascript
复制
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,但仍然没有成功。

有人能让我知道在不等待第一个调用完成的情况下执行这些请求应该做些什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-11 00:04:49

waitress在线程池上运行请求,默认为4个螺纹。因为日志显示了4个请求,所以这不是限制。

doSomeHeavyWork实现了没有i/o或睡眠的繁忙等待。由于吉尔,Python执行块甚至在不同的线程上(相对于i/o或大多数低级库)。如果这样做是在执行i/o或调用pandas/numpy类型的操作(其中许多操作不是全部释放GIL),而不是繁忙的等待,那么阻塞时间就会少得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69911441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档