Я решил попробовать твою версию, спасибо за дельный совет, но у меня оказалось дело в другом. run_in_executor() идет после get_next_task() где выставляется started_at для выполнения. Я проверил БД и проблема была в этом. started_at выставлялся для всех задач примерно равно, а created_at был с задержками из-за NOW() который фиксирует начало транзакции, а не ее коммит.
Да, примерно в эту сторону и хочу дальше развивать проект. Сейчас это скорее эксперимент с воркерами в одном процессе.
Особенно хочу отдельно проверить логирование - синхронность там уже дала о себе знать. Думаю скоро доделаю проект, уберу синхронные участки, прогоню бенчмарк ещё раз, а потом попробую вариант с несколькими процессами и сравню результаты.
Спасибо, интересный кейс. Я тоже сначала думал на PostgreSQL, но, как писал в посте, по docker stats сильной нагрузки на него не было. Но блокировки и время ожидания транзакций отдельно пока не проверял, так что полностью исключать этот вариант не буду. Скоро доделаю проект и попробую проверить это отдельно.
Пока не знаю, скоро доделаю проект. Тоже сначала думал на него, но как сказал в посте docker stats не показывали перегруза. Возможно дело в оставшейся синхронности
Под воркером я имел ввиду корутину, которая просто берет задачу из очереди и обрабатывает её, а не отдельный тред. Все воркеры по сути в одном ивент лупе. Думаю скоро я доделаю проект, уберу синхронность, проверю логирование. Потом прогоню еще раз и напишу продолжение с результатами.
Я решил попробовать твою версию, спасибо за дельный совет, но у меня оказалось дело в другом. run_in_executor() идет после get_next_task() где выставляется started_at для выполнения. Я проверил БД и проблема была в этом. started_at выставлялся для всех задач примерно равно, а created_at был с задержками из-за NOW() который фиксирует начало транзакции, а не ее коммит.
Спасибо! Попробую и в следующей статье расскажу
Да, примерно в эту сторону и хочу дальше развивать проект. Сейчас это скорее эксперимент с воркерами в одном процессе.
Особенно хочу отдельно проверить логирование - синхронность там уже дала о себе знать. Думаю скоро доделаю проект, уберу синхронные участки, прогоню бенчмарк ещё раз, а потом попробую вариант с несколькими процессами и сравню результаты.
Спасибо, интересный кейс. Я тоже сначала думал на PostgreSQL, но, как писал в посте, по docker stats сильной нагрузки на него не было. Но блокировки и время ожидания транзакций отдельно пока не проверял, так что полностью исключать этот вариант не буду. Скоро доделаю проект и попробую проверить это отдельно.
Пока не знаю, скоро доделаю проект. Тоже сначала думал на него, но как сказал в посте docker stats не показывали перегруза. Возможно дело в оставшейся синхронности
Под воркером я имел ввиду корутину, которая просто берет задачу из очереди и обрабатывает её, а не отдельный тред. Все воркеры по сути в одном ивент лупе. Думаю скоро я доделаю проект, уберу синхронность, проверю логирование. Потом прогоню еще раз и напишу продолжение с результатами.