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

Другие вопросы по тегам