2017-01-03 7 views
0

Кажется, что он отличается. Один очень медленный, а anthor очень быстрый. Просто потому, что [import demo]? Зачем?web.py заблокирован при использовании multiprocess-lib

Медленный один:

[demo_app.py]

import web 
urls = ('/(.*)', 'demo.hello') 
app = web.application(urls, globals()) 
application = app.wsgifunc() 
if __name__ == "__main__": 
    app.run() 

[demo.py]

from multiprocessing import Manager 
tmp = Manager() 
class hello: 
def GET(self,name): 
    return 'Hello world' 

[работать с uwsgi] uwsgi -d demo.log - http 127.0.0.1:8893 -w demo_app -p 1

[curl http://127.0.0.1: 8893 /] очень медленно


OK (быстро) один:

[demo_app.py]

import web 
import demo 
urls = ('/(.*)', 'demo.hello') 
app = web.application(urls, globals()) 
application = app.wsgifunc() 
if __name__ == "__main__": 
    app.run() 

[demo.py]

from multiprocessing import Manager 
tmp = Manager() 
class hello: 
def GET(self,name): 
    return 'Hello world' 

[работать с uwsgi] uwsgi - d demo.log --http 127.0.0.1:8893 -w demo_app -p 1

[завиток быстро

---------------------

В 'медленных' один, я Трассирование (Linux) подпроцесс (uwsgi forked). После того, как uwsgi будет писать контент, он будет epoll_wait 60s. Параметры epoll_event в функции epoll_wait пусты. посмотрите на рис. ниже: strace log

+0

Первый запрос очень медленный, и второй раз в порядке. – lee

+0

Существует еще один вопрос: если remove (tmp = Manager()), медленнее становится быстро. Код Thist (tmp = Manager()) стоит более 30 секунд, я не думаю, что это имеет смысл. – lee

ответ

0

С быстрым, вы импортировали демоверсию при запуске программы (то есть во время запуска uwsgi). Поэтому никаких дополнительных накладных расходов во время HTTP-запроса нет.

С медленным демо будет импортировано по первому запросу HTTP (то есть во время завивки). После того, как они были загружены, время будет одинаковым.

+0

Спасибо, Питер. Но есть и другой вопрос: если remove (tmp = Manager()), медленнее становится быстро. Код Thist (tmp = Manager()) стоит более 30 секунд, я не думаю, что это имеет смысл. – lee

+0

Я понимаю, что вы имеете в виду. В моем случае «медленный» - это 1 минута, что выглядит как провал таймаута, а просто работает медленно. Даже предоставление '--enable-threads' с uwsgi не помогает. Я подозреваю, что тупик в тупике и удивление, если ваши быстрые/медленные примеры будут работать даже для многопроцессорной обработки в web.py (вы получили это далеко?) – pbuck

+0

1, Да. это будет стоить 1 минута. Я строю подпроцесс, вы можете увидеть рис в вопросах. 2, да. многопроцесс будет работать, я сделал несколько экспериментов. 3. Я подозреваю, что это ошибка в uwsgi, и я проверю исходный код ... – lee