javascript - 如果多个用户同时调用 Python 函数是否有效?

标签 javascript python django python-2.7 django-views

我正在使用 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”函数将同时被调用。那么它将如何运作?

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

最佳答案

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

让我们以只有一个 worker 的最简单的情况为例。在这种情况下,一切都是顺序的。 uWSGI 自动按照请求进来的顺序为你排好队,然后一个一个地送到你的 webapp。希望这很清楚,它不会导致任何关于不正确输出的竞争条件。

但是,如果您说每秒收到 10 个请求,则意味着该工作人员需要在 <10 毫秒内处理每个请求。如果做不到这一点,那么请求就会开始堆积。

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

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

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

关于javascript - 如果多个用户同时调用 Python 函数是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39192846/

相关文章:

python - Django RequestFactory 添加 HTTP_X_FORWARDED_FOR

django - South 是否搞乱了 Django 测试运行框架?

javascript - 我无法在 laravel 5.2 中使用 ajax 将数据插入数据库

javascript - 如何检查对象是否在 JavaScript 中具有特定属性?

javascript - 将变量从复选框传递给 onclick 函数

python - 使用 openpyxl 从 Excel 中的列获取值

python - create() 接受 1 个位置参数,但给出了 3 个

javascript - ajax 表单提交重定向就像一个非 ajax 表单

python - 在批量更新中提供提示

python - 无法从 pyspark RDD 的映射方法访问类方法