2016-02-01 2 views
0

У меня возникли проблемы с запуском и запуском простой многопоточной функции в моем веб-приложении.Фоновые потоки, не начинающиеся до выключения сервера

Im использование колбы, uwsgi, nginx на Ubuntu 12.04.

Каждый раз, когда я запускаю новый поток, он не будет выполняться до того, как я выключу сервер uwsgi. Это очень странно!

Если я выполняю простую задачу (например, печать), она будет выполняться как ожидается 9/10 раз. Если я выполняю тяжелое вычислительное задание (например, OCR в файле), он всегда будет начинает выполнение при перезапуске сервера (выполнение выключения)

Любая идея, почему мой код не работает должным образом?

Код:

def hello_world(world): 
    print "Hello, " + world # This will get printed when the uwsgi server restarts 

def thread_test(): 
    x = "World!" 
    t = threading.Thread(target=hello_world, args=(x,)) 
    t.start() 

@application.route('/api/test') 
def test(): 
    thread_test() 
    return "Hello, World!", 200 

EDIT 1:

Моя конфигурация uwsgi выглядит следующим образом:

[uwsgi] 
chdir  = /Users/vingtoft/Documents/Development/archii/server/archii2/ 
pythonpath = /Users/vingtoft/Documents/Development/archii/server/archii2/ 
pythonpath = /Users/vingtoft/Documents/Development/archii/server/ml/ 
module  = app.app:application 
master  = True 
vacuum  = True 
socket  = /tmp/archii.sock 
processes = 4 
pidfile  = /Users/vingtoft/Documents/Development/archii/server/archii2/uwsgi.pid 
daemonize = /Users/vingtoft/Documents/Development/archii/server/archii2/uwsgi.log 
virtualenv = /Users/vingtoft/Documents/Development/virtualenv/flask/ 
wsgi-file = /Users/vingtoft/Documents/Development/archii/server/archii2/app/app.py 
ssl   = True 
+0

Разве вы не должны ждать окончания потока до завершения процесса? –

+0

Нить не запускается, прежде чем я выключу сервер. – Vingtoft

+0

Можете ли вы показать конфигурацию uWSGI? – GwynBleidD

ответ

1

uWSGI сервер по умолчанию отключит потоки поддержки для некоторых улучшений производительности, но вы можете включить его с помощью:

threads = 2 # or any greater number 

или

enable-threads = true 

Но быть предупрежден, что первый метод покажет uWSGI создать 2 темы для каждого из ваших рабочих так для 4 рабочих, вы будете в конечном итоге с 8 фактическими потоками.

Эти потоки будут работать как отдельные работники, поэтому они не предназначены для использования для фоновых заданий, но использование любого количества потоков больше одного позволит включить поддержку потоков для uWSGI-сервера, поэтому теперь вы можете создать больше для некоторых фоновые задачи.

Смежные вопросы