2015-04-16 5 views
-2

У меня есть непрерывный поток данных, поступающий из сокета.Генераторы Python Vs Thread

Мне нужно управлять ими на лету, пока другие данные все еще идут.

Лучше использовать выход (генераторный) или нить?

благодаря

ответ

1

Это лучше обрабатывать долго работает сеть (сокет) операций с помощью резьбы. Это особенно полезно, если вы выполняете какие-либо действия в основном потоке (или после получения входов из сокетов).

Генераторы обычно не используются в сетевых операциях.

0

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

2

Обе работы. У обоих есть свои проблемы.

Дэвид Бизли говорит хорошо о проблемах как и показывает его в этом PyCon 2015 ток-видео: https://www.youtube.com/watch?v=MCs5OvhV9S4

Краткое резюме вроде:

  • Вы можете использовать как генераторы/сопрограммам или потоки или многопроцессорность, чтобы сделать вашу работу.
  • Python GIL укусит вас за совместные подпрограммы/потоки, если что-то связано с жесткой вычислительной работой в чистом Python (C-Extension, как numpy, может избежать этого).
  • До тех пор, пока вы в основном делаете I/O, это не имеет большого значения. Нитки работают лучше, если у вас большие куски работы, совместные подпрограммы лучше работают, если у вас меньше кусков. Если вы используете пулы, например. из фьючерсного модуля вы можете немного изменить и изменить поведение.

Довольно сложно сказать, что лучше всего работает, это полностью зависит от вашей рабочей нагрузки.

+0

Спасибо за ответ. Просмотр сценариев Дэвида - это фантастика. – arj