【问题标题】:Testing a Django app in many separate threads在多个单独的线程中测试 Django 应用程序
【发布时间】:2011-12-14 19:57:21
【问题描述】:

我想在多个线程(可能有几十个)中并行运行我的 Django 应用程序的测试。这是因为我的应用程序几乎将所有时间都花在等待远程请求上,而且我认为如果我并行运行测试,它们将同时工作而不会相互拖慢,整个套件会非常漂亮很快。

但是...目前正在使用 Django 的 runserver 运行测试,它是单线程的。所以它不能同时处理几十个请求。

(我使用 Django 的 ./manage.py testdjango_nose 来调用测试。)

我的一个想法是改用devserver。问题是,调用./manage.py test时会自动使用吗?

另外一个问题是:我很随机地碰到devserver,我不知道它是否有可能更好的竞争对手。是吗?

【问题讨论】:

标签: python django multithreading testing


【解决方案1】:

使用 uWSGI

pip install uwsgi

为您的项目创建 .ini:

[uwsgi]
# set the http port
http = :8000
# change to django project directory
chdir = /var/www/myapp
# add /var/www to the pythonpath, in this way we can use the project.app format
pythonpath = /var/www
# set the project settings name
env = DJANGO_SETTINGS_MODULE=myapp.settings
# load django
module = django.core.handlers.wsgi:WSGIHandler()

用内置的http服务器启动它

uwsgi --ini django.ini --async 10

async — 线程数

http://projects.unbit.it/uwsgi/wiki/Quickstart

http://projects.unbit.it/uwsgi/wiki/Doc095

【讨论】:

    【解决方案2】:

    我最近开始研究 django-celery,它是 django 的异步任务队列。它允许您将任务排队以异步运行,这样您就不必等待响应。它易于安装和上手,它允许您的应用程序利用异步队列,而不仅仅是您的测试套件。

    http://django-celery.readthedocs.org/en/latest/getting-started/index.html

    【讨论】:

    • Celery 很棒,但我不明白它如何解决我的问题。
    • 我在想,如果您将应用发出的每个请求作为自己的任务提交,它们将异步运行,您不必在执行下一个响应之前等待每个响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2010-09-11
    • 1970-01-01
    • 2018-11-03
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多