Python, SQLite и поточная обработка

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

7
задан Peter Mortensen 10 September 2010 в 23:09
поделиться

5 ответов

Короткий ответ: не используйте Sqlite3 в потоковом приложении.

базы данных Sqlite3 масштабируются хорошо для размера, а скорее ужасно для параллелизма. Вы будете заполонены с "Базой данных, заблокирован" ошибки.

, Если Вы делаете, Вам будет нужно соединение на поток, и необходимо удостовериться, чтобы эти соединения вымылись после себя. Это традиционно обрабатывается с помощью локальных для потока сессий и выполняется скорее хорошо (например), с помощью ScopedSession SQLALCHEMY. Я использовал бы это на вашем месте, даже если Вы не используете функции SQLAlchemy ORM.

7
ответ дан 6 December 2019 в 23:14
поделиться

"... создайте несколько потоков, которые соберут данные в указанном интервале и кэше что данные локально в sqlite базу данных. Затем в основном потоке запускают приложение CherryPy, которое запросит, что sqlite дб и служит данным. "

не тратят впустую много времени на потоках. Вещами, которые Вы описываете, являются просто процессы ОС. Только запустите обычные процессы, чтобы сделать сбор и выполнить Cherry Py.

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

А Приложение CherryPy, также, является процессом ОС, ни одним потоком некоторого большего процесса.

Просто процессы использования - потоки не помогут Вам.

1
ответ дан 6 December 2019 в 23:14
поделиться

В зависимости от приложения DB мог быть реальными издержками. Если мы говорим об энергозависимых данных, возможно, Вы могли бы пропустить коммуникацию через DB полностью и совместно использовать данные между процесс сбора данных и процесс (процессы) обслуживания данных через IPC. Это не опция, если данные должны быть сохранены, конечно.

0
ответ дан 6 December 2019 в 23:14
поделиться

В зависимости от скорости передачи данных sqlite мог быть точно корректным способом сделать это. Вся база данных заблокирована для каждой записи, таким образом, Вы не выходите на более высокий уровень к 1000-м одновременных записей в секунду. Но если у Вас только есть некоторые, это - самый безопасный способ гарантировать, что Вы не перезаписываете друг друга.

0
ответ дан 6 December 2019 в 23:14
поделиться

Вы можете использовать что-то вроде , что . ​​

3
ответ дан 6 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

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