LINUX.ORG.RU

Celery + Peewee

 , , , ,


0

1

Пытаюсь сейчас использовать для отдельных задач Celery. Первая задача проходит нормально. На всех последующих сыпется: peewee.OperationalError: SSL error: decryption failed or bad record mac

ORM peewee. Пробовал гуглить. Особо полезного мало нашел. Судя по всему, какая-то проблема с переиспользованием соединений. Пробовал использовать базу с пулом соединений. На первой же ошибке валится, что соединение уже открыто.

Ответ на: комментарий от WitcherGeralt
db = PostgresqlExtDatabase(Config.DB_DATABASE,
                           user=Config.DB_USER,
                           password=Config.DB_PASSWORD,
                           host='127.0.0.1',
                           port=5432)

Обьект базы данных.

В таске просто получение обьектов моделей ORM и использование их данных.

Логи celery:

2019-10-23 20:52:55,205: ERROR/ForkPoolWorker-9] Task tasks.order_tasks.verification_rejected_task[047cd886-1bcf-4a37-8cc0-60eea576f4ca] raised unexpected: OperationalError('SSL error: decryption failed or bad record mac\n')
Traceback (most recent call last):
  File "/home/crarkie/Projects/proj/venv/lib/python3.7/site-packages/peewee.py", line 3005, in execute_sql
    cursor.execute(sql, params or ())
psycopg2.OperationalError: SSL error: decryption failed or bad record mac


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/crarkie/Projects/proj/venv/lib/python3.7/site-packages/celery/app/trace.py", line 385, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/home/crarkie/Projects/proj/venv/lib/python3.7/site-packages/celery/app/trace.py", line 648, in __protected_call__
    return self.run(*args, **kwargs)
  File "/home/crarkie/Projects/proj/venv/lib/python3.7/site-packages/peewee.py", line 402, in inner
    return fn(*args, **kwargs)
  File "/home/crarkie/Projects/proj/tasks/order_tasks.py", line 63, in verification_rejected_task
    texts = get_user_texts(user_id)
  File "/home/crarkie/Projects/proj/texts.py", line 40, in get_user_texts
    user = User.get_or_none(user_id)
  File "/home/crarkie/Projects/proj/venv/lib/python3.7/site-packages/peewee.py", line 6247, in get_or_none
    return cls.get(*query, **filters)
  File "/home/crarkie/Projects/proj/venv/lib/python3.7/site-packages/peewee.py", line 6242, in get
    return sq.get()
  File "/home/crarkie/Projects/proj/venv/lib/python3.7/site-packages/peewee.py", line 6665, in get
    return clone.execute(database)[0]
  File "/home/crarkie/Projects/proj/venv/lib/python3.7/site-packages/peewee.py", line 1812, in inner
    return method(self, database, *args, **kwargs)
  File "/home/crarkie/Projects/proj/venv/lib/python3.7/site-packages/peewee.py", line 1883, in execute
    return self._execute(database)
  File "/home/crarkie/Projects/proj/venv/lib/python3.7/site-packages/peewee.py", line 2054, in _execute
    cursor = database.execute(self)
  File "/home/crarkie/Projects/proj/venv/lib/python3.7/site-packages/playhouse/postgres_ext.py", line 471, in execute
    cursor = self.execute_sql(sql, params, commit=commit)
  File "/home/crarkie/Projects/proj/venv/lib/python3.7/site-packages/peewee.py", line 3012, in execute_sql
    self.commit()
  File "/home/crarkie/Projects/proj/venv/lib/python3.7/site-packages/peewee.py", line 2783, in __exit__
    reraise(new_type, new_type(*exc_args), traceback)
  File "/home/crarkie/Projects/proj/venv/lib/python3.7/site-packages/peewee.py", line 183, in reraise
    raise value.with_traceback(tb)
  File "/home/crarkie/Projects/proj/venv/lib/python3.7/site-packages/peewee.py", line 3005, in execute_sql
    cursor.execute(sql, params or ())
peewee.OperationalError: SSL error: decryption failed or bad record mac

crarkie ()
Ответ на: комментарий от WitcherGeralt

Пробуй host='localhost', тогда соединение будет через unix socket и ssl использоваться не будет.

К сожалению, это ровным счетом никак не помогло. Вообще не пойму, причем тут SSL, если я его не включал даже в конфиге.

crarkie ()
Ответ на: комментарий от crarkie

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

Как вариант: проблема может быть в том, что ты сначала устанавливаешь соединение, а потом форкаешься.

WitcherGeralt ★★ ()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от crarkie

То есть проблема всё таки с соединением перед форком была.

А тебе ядра не нужно утилизировать? gevent же ничего не параллелит. Если действительно не нужно, то логично было бы использовать asyncio (и async-peewee).

Впрочем, Celery в любом случае — мёртвое легаси, ибо asyncio умеет в ProcessPoolExecutor.

WitcherGeralt ★★ ()
Ответ на: комментарий от crarkie

Поэтому, как их лучше подружить в целом было бы?

Не сталкивался с такой необходимстью. Да и по месту нужно смотреть. Дружить ужа с ежом может оказаться нецелесообразно, может быть быстрее переписать, либо разделить на разные сервисы (если это сервис), или просто продолжать тянуть легаси, если проект особенно не развивается.

WitcherGeralt ★★ ()
Последнее исправление: WitcherGeralt (всего исправлений: 1)