Как использовать потоковую передачу с django и gunicorn
Я пытаюсь использовать библиотеку потоков внутри приложения django, которое использует gunicorn. Когда я запускаю свой код локально, все хорошо, но как только я пытаюсь вызвать представление из production, я получаю контекстную ошибку. Я полагаю, что это происходит из-за gunicorn.
Вот ошибка
RuntimeError: cannot exit context: thread state references a different context object
Вот мой код.
t = threading.Thread(
target=myFunction, args=[arg1]
)
t.setDaemon(True)
t.start()
Я размещаю решение, которое я нашел, поскольку я не смог найти никаких ссылок на эту точную проблему и решение. Оказалось, что проблема была не в python или django, а скорее в самом Gunicorn. Для того чтобы использовать потоки, мне пришлось добавить параметр --threads в служебный файл.
/usr/bin/gunicorn3 --name=my_app --pythonpath=/home/django/myenv --bind unix:/home/django/myenv/my_app/gunicorn.socket my_app.wsgi:application --workers=4 --threads=2 --worker-class=gthread
Я также установил рабочий класс на gthread