Ошибка многопроцессорной обработки Snowflake Python Connector с flask_socketio

Я получаю следующие ошибки при попытке выполнить запрос к снежинке, используя коннектор снежинки для python с flask_socketio и eventlet. Похоже, это происходит только тогда, когда обезьяна исправляет eventlet. Любая помощь в этом очень ценится.

import snowflake.connector as scon
from flask import Flask
from flask_socketio import SocketIO
import eventlet
eventlet.monkey_patch()

def query():
    # Gets the version
    ctx = scon.connect(
                       user='xxx',
                       password='xxxxxxxx',
                       account='xxxxxx',
                      )
    cs = ctx.cursor()
    try:
        cs.execute("SELECT current_version()")
        one = cs.fetchone()
        return 'Snowflake version={}'.format(one[0])
    finally:
        cs.close()

app = Flask(__name__)
socketio = SocketIO(app)


@app.route('/')
def query_route():
    return query()

socketio.run(app,debug=False, host='localhost', port=5000)

Получена ошибка:

Traceback (most recent call last):
  File "/home/chad/miniconda2/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/home/chad/miniconda2/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/home/chad/miniconda2/lib/python2.7/multiprocessing/pool.py", line 327, in _handle_workers
    while thread._state == RUN or (pool._cache and thread._state != TERMINATE):
AttributeError: '_MainThread' object has no attribute '_state'

Exception in thread Thread-6:
Traceback (most recent call last):
  File "/home/chad/miniconda2/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/home/chad/miniconda2/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/home/chad/miniconda2/lib/python2.7/multiprocessing/pool.py", line 363, in _handle_tasks
    cache[job]._set(ind + 1, (False, ex))
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

person Chad Ongstad    schedule 15.03.2018    source источник


Ответы (1)


Пакет multiprocessing несовместим с Eventlet. Вот комментарий от сопровождающего Evenlet.

Вероятно, вам следует подумать о переносе этой функциональности в отдельный процесс (возможно, в другой микросервис), где вы не привязаны к Eventlet.

person Miguel    schedule 17.03.2018