Модуль Pprint работает медленно с Django в 32-битной системе - PullRequest
3 голосов
/ 29 декабря 2011

Я использую Django на 32-битной машине Ubuntu с Python 2.7. Мой сервер разработки работал медленно, занимая около 15 секунд для рендеринга любой страницы. Я запустил тест cProfile, чтобы посмотреть, что работает так медленно.

Похоже, это модуль pprint.

Вот моя статистика:

ncalls       tottime percall cumtime percall filename:lineno(function)
272605/48718  24.238       0  49.213   0.001 pprint.py:247(_safe_repr)

и это мой коллега, который работает под управлением 64-разрядной ОС X:

14531/5334    1.016    0.000    2.199    0.000 pprint.py:247(_safe_repr)

Между тем мне приходится отключать режим отладки, чтобы нормально использовать сервер dev.

Вот скрипт профилирования:

from cProfile import Profile
from django.test.client import Client
import Cookie
cl = Client()
cl.cookies = Cookie.SimpleCookie({'sessionid':'7344ebeba093b65c1d59a9d7583f60bc'})
p = Profile()
p.runctx("c.get('/welcome/')", globals={'c': cl}, locals={})
p.print_stats()

(cookie-файл sessionid используется для отображения страницы, на которой вам нужно войти.)

Я не уверен, что 32-битная система является основной причиной.

Основной вопрос: Почему pprint._safe_repr такой медленный в Python 2.7 32-битный и быстрый в 64-битном? и могу ли я установить что-то, чтобы сделать это быстрым.

1 Ответ

5 голосов
/ 29 декабря 2011

Почему pprint._safe_repr такой медленный в Python 2.7 32 бит и быстрый в 64 бит?

Он не быстрый на 64 битах.Ваш коллега получил намного меньше ncalls.

Вы должны выяснить, почему один GET приводит к такому большому количеству вызовов на _safe_repr().

...