Допустим, у вас есть процесс Python, который собирает данные в режиме реального времени со скоростью около 500 строк в секунду (это может быть дополнительно распараллелено для сокращения примерно до 50 пс) из системы очередей и добавления его к DataFrame
:
rq = MyRedisQueue(..)
df = pd.DataFrame()
while 1:
recv = rq.get(block=True)
# some converting
df.append(recv, ignore_index = True)
Теперь вопрос: Как использовать процессоры на основе этих данных? Итак, я полностью осознаю ограничения GIL и посмотрел в диспетчер многопроцессорной обработки пространство имен , и здесь , но, похоже, есть некоторые недостатки в отношении задержки на удерживаемом по центру кадре данных . Прежде чем углубиться в это, я также попытался pool.map
, который я чем распознал , чтобы применить pickle
между процессами, что слишком медленно и имеет слишком много накладных расходов.
Итак, после всего этого я, наконец, задаюсь вопросом, как (если) вставка в 500 строк в секунду (или даже 50 строк в секунду) может быть передана различным процессам с некоторым временем ЦП, оставшимся для применения статистики и эвристики к данным в дочернем элементе процессы?
Может быть, было бы лучше внедрить пользовательский сокет tcp или систему очередей между двумя процессами? Или есть какие-то реализации в pandas
или других библиотеках , чтобы действительно разрешить быстрый доступ к одному большому фрейму данных в родительском процессе ? Я люблю pandas!