2016-03-22 4 views
0

У меня довольно стандартная бутылка Python api. Несколько функций утилиты общего доступа api. Похоже, что функция утилиты не вызывается параллельно ???Python Bottle Framework - общая функция не запускается параллельно с конечными точками

В приведенном ниже примере кода api имеет две конечные точки, foo и bar. Я понимаю, что если foo и bar вызывались одновременно, для их обработки создаются два отдельных потока. Таким образом, util_func должен выполняться в рамках этих потоков.

Я вижу две отдельные темы, созданные. Но util_func, похоже, заблокирован последним вызывающим потоком. Например, если вызывается bar, то foo. util_func в баре блокируется до тех пор, пока util_func в foo не завершится. Затем util_func в баре завершается.

Является ли это ожидаемым поведением ??? Единственное отличие моего кода в том, что util_func - это отдельный модуль.

def util_func(): 
    # do stuff 

@app.route(/foo) 
def foo(): 
    util_func() 
    # do other stuff 

@app.route(/bar) 
def bar(): 
    util_func() 
    # do other stuff 

bottle.run(app=app,host='localhost', port=8888,server='cherrypy') 
+0

Да, это ожидаемое поведение , предполагая, что 'util_func' не делает никаких вызовов ввода/вывода. Запускается только один поток Python. См. Https://wiki.python.org/moin/GlobalInterpreterLock –

ответ

0

Возможно, у вас есть проблема GIL.

Если вы напишем

def util_func(): 
    time.sleep(10) #10 long seconds... 

Вы должны видеть, что они работают в параллельном

Если вы будете предоставлять более подробную информацию о util_func я бы предоставить больше помощи