2012-02-14 2 views
0

В debug_toolbar мне сообщается, что у меня есть 44 приемника из 12 сигналов как в интерфейсе, так и в django-admin. Это нормально? Это замедляет работу? Есть ли что-нибудь, что я должен проверить/исправить в соответствии с вами?Django: Многие сигналы замедляют работу?

Возможно, я что-то испортил с помощью pinax, я заметил, что есть также много запросов, которые, кажется, повторяются. (Проверено, и запросы, кажется, нормально)

Это выход на панели инструментов:

class_prepared class setup_join_cache, ensure_default_manager, do_pending_lookups, prep_localized_datetime 
connection_created connection 
got_request_exception request _rollback_on_exception 
post_delete instance, using 
post_init instance TagAutocompleteTagItField._update, TagAutocompleteTagItField._update, ImageField.update_dimension_fields, ImageField.update_dimension_fields, ImageField.update_dimension_fields, TagAutocompleteTagItField._update, TagAutocompleteTagItField._update, TagAutocompleteTagItField._update, ImageField.update_dimension_fields, ImageField.update_dimension_fields, ImageField.update_dimension_fields, TagAutocompleteTagItField._update, TagAutocompleteTagItField._update, TagAutocompleteTagItField._update, ImageField.update_dimension_fields, ImageField.update_dimension_fields 
post_save instance, created, using, raw create_account, superuser_email_address, create_profile, signup_code_result_save, TagAutocompleteTagItField._save, TagAutocompleteTagItField._save, TagAutocompleteTagItField._save, TagAutocompleteTagItField._save, TagAutocompleteTagItField._save, TagAutocompleteTagItField._save, TagAutocompleteTagItField._save, TagAutocompleteTagItField._save 
post_syncdb app, verbosity, interactive, class, created_models 
pre_delete instance, using 
pre_init instance, args, kwargs GenericForeignKey.instance_pre_init, GenericForeignKey.instance_pre_init, GenericForeignKey.instance_pre_init, GenericForeignKey.instance_pre_init, GenericForeignKey.instance_pre_init, GenericForeignKey.instance_pre_init, GenericForeignKey.instance_pre_init, GenericForeignKey.instance_pre_init, GenericForeignKey.instance_pre_init 
pre_save instance, using, raw  
request_finished  close_connection 
request_started  reset_queries 

TagAutocompleteTagItField подкласс Джанго-мечения

ответ

1

Сигналы синхронны, так что они будут способствовать на время обработки любого запроса, в котором они вызываются. Поэтому зависит от того, влияет ли производительность, зависит от того, что делается в этих функциях.

В вашем случае, похоже, много чего происходит с созданием/сохранением модели из ваших полей.

Это не по умолчанию django ImageField, соединяющий все эти сигналы вправо? Похоже, что в вашем проекте есть сигнал, подключенный к вашему полю.

В любом случае те TagAutocompleteTagItField и ImageFields, похоже, добавляют большинство ваших сигналов. Накладных расходов для моделей, которые не имеют этих полей будет вдоль линий проверки каждого поля в модели на матч, что-то вроде:

tag_fields = [field for field in c._meta.fields if type(field) == TagAutocompleteTagItField] 

if tag_fields: 
    # Do stuff 

Это не должно быть так плохо на самом деле.

Если у вас есть тонна этих полей, возможно, стоит проверить его, отключив те сигналы TagAutocompleteTagItField и ImageField. Затем, если это утечка, посмотрите, можете ли вы переместить часть логики в сигналах где-то еще, например, вычисляя размеры ImageField при их доступе.

Но .. Я бы не стал. Пока нет. Помните, что «преждевременная оптимизация - это корень всего зла»!

+0

спасибо за ваш ответ. Я пытаюсь понять, если что-то не так с моими настройками. Я еще не использовал сигналов ... Я заметил, что написал что-то неправильное, у меня есть 44 приемника из 12 сигналов. Что это значит? Я отредактирую свой вопрос, чтобы добавить это. – nemesisdesign

+0

Я отредактировал вопрос с несколькими подробностями. – nemesisdesign

+1

Эти поля, вероятно, каждый добавляет обработчик сигнала при запуске. Django не имеет проблемы с регистрацией одного обработчика сигнала несколько раз, поэтому, если каждое поле регистрирует одно, вы получите результаты, которые у вас есть. Я не использовал pinax, поэтому я не могу больше помочь. Я бы не волновался, хотя! –

Смежные вопросы