如果多个用户在同一时刻调用Python函数,它是否工作?

Does Python function work if multiple user call it at same instant?

本文关键字:函数 Python 是否 工作 调用 时刻 用户 如果      更新时间:2023-09-26

我使用的是Django框架。我已经建立了一个web应用程序使用Python和Django。我没有在我的应用程序中使用任何类或oops概念。我只是在使用python的函数。

用于例如

def addnum(request):
    a=request.GET.get('a')
    b=request.GET.get('b')
    res=a+b
    return HttpResponse(json.dumps(res), content_type="application/json")

现在我使用ajax从客户端调用这种函数并返回我的结果。

我的问题是,如果多个用户在同一时刻访问应用程序,那么这个'addnum'函数将在同一时刻被调用。那么它将如何运作呢?

它会因为一些用户和错误的输出而中断吗?它会降低性能并增加响应时间吗?它会并行工作吗?一切都会正常工作吗?

当多个用户"同时"访问它时,它实际上不是在同一时间。假设你正在使用uWSGI来服务你的webapp,这意味着你的webapp有一堆处理请求的worker。

让我们举一个最简单的例子,你只有一个工人。在这种情况下,一切都是顺序的。uWSGI自动按照请求的顺序为您排队,并将其一个接一个地提供给您的web应用程序。希望这是清楚的,它不会导致任何竞争条件,关于不正确的输出。

但是,如果您说每秒收到10个请求,这意味着一个工作程序需要在10ms内处理每个请求。如果它不能这样做,那么请求将开始堆积。

同样,假设你"瞬间"收到10个请求。然后一个请求可能在10ms内返回,第二个请求在20ms内返回,第三个请求在30ms内返回等等(这实际上是不准确的,因为还有网络往返时间,但我们现在忽略它)

现在假设您设置了多个worker(单独的进程)来帮助更快地处理这些请求。但是由于它们是独立的进程,它们不共享内存。所以这里没有竞态条件。(请注意,如果您做诸如写入/读取文件等操作,则会发生变化)

在这里,您可以让多个工作者并行处理请求。但它仍然只是uWSGI维护一个请求队列,当工人完成处理请求并释放时,它将其提供给工人。