【问题标题】:django server replies synchronously to multiple ajax get requestsdjango 服务器同步回复多个 ajax get 请求
【发布时间】:2016-01-22 10:04:30
【问题描述】:

我有一个向 django 服务器发送多个 ajax get 请求的网页。 服务器对其收到的每个请求进行一些互联网爬取,并在完成后向客户端返回响应。 似乎服务器一个接一个地回复请求。 我正在考虑将每个请求发送给 Celery worker 以使服务器的响应异步,但我不确定它是否能解决问题。

我还在 heroku 上使用 django,但不知道如何在 heroku 上将 celery 与 django 结合使用。

【问题讨论】:

  • 您不需要 Celery,您只需要在 dyno 上运行多个 Django 进程...您使用的是什么 Web 服务器?提供有关您的服务配置的更多详细信息
  • 我希望服务器表现得好像每个请求都有一个线程。我正在使用默认设置,如 heroku 上的 django 入门教程中所示
  • 如果您在 Python 并发的上下文中谈论线程,那么您需要了解 GIL wiki.python.org/moin/GlobalInterpreterLock 的限制
  • 感谢您的参考。您是否建议存在阻止服务器同时服务请求的固有瓶颈?必须有办法做到这一点。

标签: ajax django heroku


【解决方案1】:

Heroku Django 教程应用程序使用 gunicorn 作为服务器,您可以在此处看到:
https://github.com/heroku/python-getting-started/blob/master/Procfile

教程应用程序中没有特殊的 gunicorn 配置,因此您使用 gunicorn 默认设置运行。你可以在这里看到它们:
http://docs.gunicorn.org/en/stable/settings.html#worker-processes

您会注意到,这意味着您有一个 sync 类型的工作进程(即没有 greenlets 魔法来在单个 Python 进程中启用并发)

它确实说您可以通过设置 WEB_CONCURRENCY 环境变量来扩展 gunicorn 以使用多个进程(仍然在单个 Heroku dyno 上),在 Heroku 上,这很容易使用 cli 工具从本地 shell 完成:

$ heroku config:set WEB_CONCURRENCY=4

Gunicorn 文档建议将此设置为“通常在 2-4 x $(NUM_CORES) 范围内的正整数”。您的基本 Heroku dyno 将是一个单核。

【讨论】:

  • 感谢您的解释。有没有办法将其设置为最大性能?
  • “最大性能”很大程度上取决于您的应用程序的细节,但要从您的测功机中获得最大容量,您需要研究 greenlets 的东西......我推荐 gevent。要充分利用它并没有太多捷径:必须在实际负载的上下文中阅读、学习、微调配置。一些peoplerecommend 在gunicorn 上使用uWSGI
猜你喜欢
  • 2020-03-03
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
相关资源
最近更新 更多