Почему быстро создается словарь (или 4) из тысяч точек данных, но очень медленно классифицировать данные из метода dict.keys ()? [Дубликат]

Node.js основан на модели программирования цикла событий. Цикл событий работает в одном потоке и многократно ждет событий, а затем запускает любые обработчики событий, подписанные на эти события. События могут быть, например,

  • . Ожидание таймера завершено
  • следующий фрагмент данных готов к записи в этот файл
  • theres новый новый HTTP request coming our way

Все это выполняется в одном потоке, и код JavaScript никогда не выполняется параллельно. Пока эти обработчики событий малы и ждут еще большего количества событий, все работает хорошо. Это позволяет нескольким запросам обрабатываться одновременно одним процессом Node.js.

(В то время как события происходят немного, под капотом немного магии. Некоторые из них связаны с параллельными рабочими потоками низкого уровня. )

В этом случае SQL происходит много событий (событий) между созданием запроса базы данных и получением его результатов в обратном вызове. За это время цикл событий продолжает накачивать жизнь в приложении и продвигать другие запросы по одному крошечному событию за раз. Поэтому несколько запросов подаются одновременно.

event loop high level view [/g1]

В соответствии с: «Контур события из 10 000 фут-ядра концепция за Node.js ".

0
задан Doorknob 28 August 2014 в 22:15
поделиться

3 ответа

Это f in FDICT, а не f in FDICT.keys(). Использование keys создает список всех ключей и проходит через него один за другим, тогда как использование f in FDICT использует эффективный поиск на основе хэша.

11
ответ дан user2357112 31 August 2018 в 17:34
поделиться
if f in FDICT.keys()

Поскольку вы генерируете список ключей каждый раз, когда вы петли.

Попробуйте заменить его на f in fDICT

3
ответ дан Jakob Bowyer 31 August 2018 в 17:34
поделиться

Возможно, это связано с тем, что вы вызываете FDICT.keys():, который должен создать список ключей. Вы хотите сделать f in FDICT:, который имеет тот же результат, но не требует создания списка ключей.

В любом случае, я слышал, что обычный оптимизированный способ сделать это - предположить, что ключ находится в dict и просто улавливает KeyError, если он не

1
ответ дан Konstantin Naryshkin 31 August 2018 в 17:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: