Я создал веб-сервер Django + uWSGI. Основной поток: когда запрос получен, Django инициирует подпоточный поток с помощью встроенного lib-Threading для написания db асинхронно, а в основном потоке он немедленно ответит клиенту.Как избежать подпотока Django, убитого uWSGI respawn
Как, uWSGI иногда будет воспитывать рабочий процесс (может быть, когда обработка процесса не обрабатывается?), Что вызвало повреждение фонового подтипа, даже когда оно еще не закончено. Любая подсказка, чтобы избежать uWSGI, чтобы не воспламенить рабочий процесс, у которого есть работающий подпоток?
uWSGI респаун журнала:
DAMN ! worker 4 (pid: 31161) died, killed by signal 9 :(trying respawn ...
uWSGI ини конфигурации (версия 2.0.12):
[uwsgi]
# Django's wsgi file
wsgi-file = /home/fh/dj_uwsgi/dj_site/dj_site/wsgi.py
master = true
processes = 10
http = :8001
threads = 2
enable-threads = true
http-timeout = 10
max-requests = 5000
chmod-socket = 664
vacuum = true
pidfile = /home/fh/dj_uwsgi/dj_site/uwsgi.pid
daemonize = /home/fh/log/uwsgi_dj.log
Джанго (версия 1.8) Код приложения псевдо:
в handlers.py:
import threading
class SubThreadClass(threading.Thread):
daemon = True
def run(self):
# actions to write db
def myHandler():
my_sub_thread = SubThreadClass()
my_sub_thread.start()
в views.py :
from handlers import myHandler
def url_handler(request):
myHandler()
return HttpResponse()
Звучит как проблема XY. Почему вы используете потоки в первую очередь? –
Привет, Даниэль, я не знаю, что такое проблема XY. Не могли бы вы поделиться дополнительной информацией? Причина, по которой я использую несколько потоков, - это как можно скорее ответить клиенту, чтобы он не блокировался операциями db. @DanielRoseman – fehu
http://xyproblem.info/ - то есть вы не спрашиваете о своей реальной проблеме. Как правило, управление потоками вручную - это хорошая идея в среде, которой вы не управляете, как вы обнаружили. Используйте автономную рабочую систему, например [Сельдерей] (http://www.celeryproject.org/). –