Задать вопрос
@kazmiruk

Почем через некоторое время сервер на gevent валится с ошибками?

Есть сервер, написанный на python + gevent. Работа с базой данных ведется через github.com/esnme/ultramysql
Вроде все работает отлично, но через часа 4 (когда как) сервер падает с ошибками:

Traceback (most recent call last):
  File "build/bdist.freebsd-8.1-RELEASE-amd64/egg/gevent/greenlet.py", line 328, in run
    result = self._run(*self.args, **self.kwargs)
  File "/usr/home/admin/server/server/connect.py", line 58, in listener
    self.dispatch(data)
  File "/usr/home/admin/server/server/connect.py", line 108, in dispatch
    self.auth(data['params'])
  File "/usr/home/admin/server/server/connect.py", line 156, in auth
    result = self.server.db.query("SELECT id, nickname FROM user WHERE id = %s", (self.userId, ))
  File "build/bdist.freebsd-8.1-RELEASE-amd64/egg/gevent/socket.py", line 435, in send
    return sock.send(data, flags)
error: [Errno 32] Broken pipe
<Greenlet at 0x802ae5c30: <bound method Connect.listener of <server.connect.Connect object at 0x8028ef490>>> failed with error


Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\gevent\greenlet.py", line 390, in run
    result = self._run(*self.args, **self.kwargs)
  File "D:\seabattle\server\server\connect.py", line 58, in listener
    self.dispatch(data)
  File "D:\seabattle\server\server\connect.py", line 108, in dispatch
    self.auth(data['params'])
  File "D:\seabattle\server\server\connect.py", line 156, in auth
    result = self.server.db.query("SELECT id, nickname FROM user WHERE id = %s", (self.userId, ))
Error: (0, 'Concurrent access in query method')
<Greenlet at 0x2c6c768L: <bound method Connect.listener of <server.connect.Connect object at 0x0000000002C81198>>> failed with Error


Грешу на драйвер работы с mysql, но причину понять не могу. Вроде рвется коннект, но почему? Наведите на здравую мысль, если не сложно? Или посоветуйте драйвер для работы mysql с gevent.
  • Вопрос задан
  • 3146 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@mayorovp
Все же написано: "Concurrent access in query method"
Нельзя вызывать query, пока не выполнился предыдущий.

Вообще, соединение с БД лучше не держать глобальным, а брать из пула на время выполнения операции. Тогда проблем будет меньше.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽