UWSGI не может найти функцию спулера
Я пытался узнать о механизме спулера uWSGI, и по этой причине я написал небольшое, фиктивное веб-приложение с Django (версия 1.3.1), и оно работает на последней стабильной версии nginx. Все работает как положено. Тем не менее, в одном из моих представлений я отправляю сообщение очереди в контейнер uWSGI и получаю следующую ошибку:
[spooler /private/tmp/receiver pid: 4115] managing request uwsgi_spoolfile_on_ozgurv.local_4165_1_0_1338280641_366596 ...
unable to find the spooler function, have you loaded it into the spooler process ?
В моем файле testapp/views.py:
from django.http import HttpResponse
from testapp.spool import three_seconds
def call(request):
three_seconds.spool(a=1, b=2)
return HttpResponse('spooled')
В моем файле testapp/spool.py:
from uwsgidecorators import *
@spool
def three_seconds(*args, **kwargs):
f = open('/tmp/args.data', 'a')
f.write(repr(kwargs) + '\n')
f.close()
Когда я выполнил функцию 'call', запросив url / call / в браузере, я получил следующую ошибку:
[spooler /private/tmp/receiver pid: 4115] managing request uwsgi_spoolfile_on_ozgurv.local_4165_1_0_1338280641_366596 ...
unable to find the spooler function, have you loaded it into the spooler process ?
uWSGI работает со следующими параметрами:
sudo uwsgi --ini ~/uwsgi.ini -b 20000
И содержимое моего файла uwsgi.ini выглядит следующим образом:
[uwsgi]
socket = 127.0.0.1:8081
listen = 4096
master = true
processes = 4
pidfile = /var/run/uwsgi.pid
enable-threads = true
uid=root
gid=admin
single-interpreter = true
disable-logging = true
buffer-size= 32768
reload-on-as = 10240
reload-on-rss = 512i0
max-requests = 50000
pythonpath = /Users/ozgurv/Developer/warehouse
module = wsgi_handler
plugins = python27,spooler
spooler-processes = 1
spooler = /tmp/receiver
Я понятия не имею, почему он жалуется на функцию спулера и почему uwsgi не может ее найти. И что означает "загрузили ли вы его в процесс спулера"? Как можно загрузить функцию диспетчера очереди в контексте процесса диспетчера очереди печати?
1 ответ
Используйте spooler-import = testapp/spool.py
Процесс диспетчера очереди будет импортировать этот модуль в свое адресное пространство процесса
другое решение - импортировать модуль во все процессы uwsgi с
import = testapp / spool.py