У меня есть приложение фляги, работающее с базовым API REST http, в котором код на одной конечной точке выглядит следующим образом:
@app.route('/api/endpoint'), methods=['GET', 'POST'])
def endpoint():
response = ImportedApiCall()
stuff()
# Running this in a thread because we
# need somefunc() to run in the background
# while returning response right away, but we only
# need somefunc() to run once and only once while
# this API endpoint receives a burst of hits
thread = threading.Thread(target=someclass.somefunc, args = (arguments,))
thread.start()
# This is needed by the external API that
# hits /api/endpoint
return str(response)
Дело в том, что эта конечная точка в / api / endpoint будет поражена несколько раз, и мне нужно, чтобы она запускала код, порожденный как поток, в значительной степени только в ПЕРВЫЙ раз, когда она выполняется, игнорируя все остальные, пока Функция в someclass.somefunc работает, что гарантированно занимает около пары минут, в то время как эти обращения к API происходят в определенный период времени. Я понимаю, что, вероятно, я должен использовать функцию потокового события, чтобы сделать это, но я не на 100% уверен, что лучший способ это сделать, так как кажется, что это чревато множеством подводных камней и предостережения (я привык к языкам, где параллелизм менее запоздалая мысль). Должен ли я как-то вставить объявление события в __init__
на someclass.somefunc или написать совершенно новый класс обработчика событий?