如果多个用户同时调用 Python 函数,它会起作用吗?

Posted

技术标签:

【中文标题】如果多个用户同时调用 Python 函数,它会起作用吗?【英文标题】:Does Python function work if multiple user call it at same instant? 【发布时间】:2017-01-04 16:38:42 【问题描述】:

我正在使用 Django 框架。我已经使用 Python 和 Django 构建了一个 Web 应用程序。我没有在我的应用程序中使用任何类或 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”函数将在同一时刻被调用。那么它会如何运作呢?

是否会因某些用户和不正确的输出而中断?它会降低性能并增加响应时间吗?它会并行工作并且一切正常吗?

【问题讨论】:

这完全取决于运行 Django 站点的服务器。 【参考方案1】:

当多个用户“同时”访问它时,实际上并不是同时访问。假设您正在使用 uWSGI 为您的 webapp 提供服务,这意味着您的 webapp 有一堆处理请求的工作人员。

让我们以最简单的情况为例,即您只有一个工人。在这种情况下,一切都是顺序的。 uWSGI 会自动将所有请求按照它们进入的顺序为您排队,并将其一一提供给您的 webapp。希望这很清楚,它不会导致与不正确的输出有关的任何竞争条件。

但是,如果您说每秒收到 10 个请求,这意味着一个工作人员需要在

另外,假设您确实“立即”收到了 10 个请求。那么一个请求可能在 10 毫秒内返回,第二个在 20 毫秒内返回,第三个在 30 毫秒内返回等等。(这实际上是不准确的,因为还有网络往返时间,但我们暂时忽略它)

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

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

【讨论】:

以上是关于如果多个用户同时调用 Python 函数,它会起作用吗?的主要内容,如果未能解决你的问题,请参考以下文章

此异步等待不应该工作。为啥它会起作用?

怒是不可行的

Visual Studio Code 中的 Emmet 有问题

如何将一组 UIButtons 添加到 UIStackview 上?

多个线程同时调用一个函数的情况

Python:在while循环中无法调用函数