/ / Trabalho intensivo em django view threads de trabalhador do gunicorn com problemas - django, gunicorn

Trabalho intensivo em django veja os fios de trabalho de gunicornes - django, gunicorn

Eu tenho um aplicativo django que processa um pouco uma foto quando ela é carregada. Esse processamento leva cerca de 100 ms.

Estou usando o Django rodando com gunicorn atrás do nginx.

Atualmente isso é feito de forma síncrona, eu uso subprocess para invocar o processamento, obtenha o resultado e retorne o resultado dentro do quadro da solicitação HTTP.

O problema é que, embora o processamento real demore apenas ~ 100 ms, a exibição às vezes leva muitos segundos para retornar, causando o travamento dos threads de trabalho do gunicorn com mensagens como:

2012-12-18 15:01:04 [31620] [CRITICAL] WORKER TIMEOUT (pid:31626)
2012-12-18 15:01:05 [31620] [CRITICAL] WORKER TIMEOUT (pid:31626)
2012-12-18 15:01:05 [31957] [INFO] Booting worker with pid: 31957

(O nível do log é DEBUG, e não recebo mais saída). Às vezes, leva todo o servidor da web para baixo.

Existe alguma maneira de mitigar esse problema? Atualmente, o tráfego não é alto o suficiente para considerar colocar o processamento em uma fila e se comunicar de forma assíncrona (e mesmo assim, queremos bloquear e ainda retornar no contexto da solicitação HTTP).

Alguém pode dar uma ideia de onde pode estar o problema?

Respostas:

0 para resposta № 1

Eu consertei isso usando eventlet tópicos.


0 para resposta № 2

Para rotinas demoradas, a execução assíncrona é uma boa solução. o Aipo biblioteca é adequada para esse tipo de trabalho. E tem um nível de entrada relativamente baixo.