Привет всем!
Подскажите кто сможет что делать с такой проблемой?
Использую Debian + Nginx + Django + UWSGI, во view одна из функций делает fork(), другой процесс ответвляется, с ним никаких проблем нет (он так и остаётся висеть в фоне слушая сокет, как задумано), после сразу идёт return render(request, ... для родительского процесса. Проблема в том, что после ответвления не прогружается сразу страница, идёт долгая загрузка и всё кончается ошибкой «Веб-страница недоступна». Если я её просто обновляю, то она прогружается нормально, так как кнопка не нажата, «start» в запросе тоже нет, ответвления не происходит. Пробовал и через multiprocessing, то же самое.
def func(request):
status = False
if 'start' in request.POST:
p = Process(target=server.startServer, args =(request.POST['typeMon'],)).start()
status = True
return render(request, 'test.html', { 'serverStatus': status })
Что я смог понять это то что вроде как запускается ещё один worker в uwsgi, и кажется ожидается что он может быть должен вернуть return из этого нового процесса, а потом по таймауту, так как там ничего не возвращается, он убивается и появляется ошибка. Ну это всё мои додумки, как точно всё работает, я не понимаю..
Решения проблемы не нашёл, стал пробовать запускать не через fork():
os.popen('python' + ' ' + os.path.join(BASE_DIR, 'server.py')+ ' ' + request.POST['typeMon'])
os.system('python' + ' ' + os.path.join(BASE_DIR, 'server.py')+ ' ' + request.POST['typeMon'])
os.execlp('python', 'python',os.path.join(BASE_DIR, 'server.py') , request.POST['typeMon'])
os.spawnv(os.P_NOWAIT, sys.executable, ('python', os.path.join(BASE_DIR, 'server.py'),request.POST['typeMon'] ))
(spawnv при этом почему то работает на встроенном в django веб-сервере а на рабочем выдаёт в лог uwsgi ошибку unable to load configuration from ...server.py)
Ни к чему это не привело, так же не срабатывает return, идёт долгая загрузка. Что-то можно с этим сделать? Так остался один вариант, не из Django запускать, а просто с консоли в фоне...
На тестовом сервере джанговском при всём при этом всё работает нормально. HELP!