在Flask的路径请求中,如何触发线程启动并让它立即继续到下一行。在下面的代码中,如何在生成新线程后立即将“打印到下一个”打印出来,而不是等待~10秒才能完成?
谢谢!
def consumer(searchValue,assignedUniqueID):
print "Searching..."
print "Running thread! Args:", (searchValue, assignedUniqueID)
time.sleep(10)
print "Done!"
@app.route('/_search')
def add_numbers():
assignedUniqueID = str(uuid.uuid4())
Thread(target=consumer(searchValue,assignedUniqueID)).start()
print "Onto the next already"
return jsonify(result="33434443",
assignedUniqueID = assignedUniqueID
)
答案 0 :(得分:1)
对不起,这是一个评论而非答案,我在这里发帖,因为评论系统有点大。
由于广泛使用thread-local storage和other magic,因此很难在Flask中跟踪此类错误。
在Web应用程序中,多任务处理通常通过使用队列而不是线程来处理,Web应用程序排队任务和后台守护程序(工作程序)完成工作。这种方法可以更好地扩展:
特别受欢迎的解决方案涉及AMQP或键/值数据库,如redis或memcached。对于Python中的AMQP,请查看celery,我将它与Django结合使用。