烧瓶螺纹触发不同的过程

时间:2013-05-20 00:52:00

标签: python multithreading web flask

在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
               )

1 个答案:

答案 0 :(得分:1)

对不起,这是一个评论而非答案,我在这里发帖,因为评论系统有点大。

由于广泛使用thread-local storageother magic,因此很难在Flask中跟踪此类错误。

在Web应用程序中,多任务处理通常通过使用队列而不是线程来处理,Web应用程序排队任务和后台守护程序(工作程序)完成工作。这种方法可以更好地扩展:

  • 工人可以住在其他机器上
  • 并行运行的worker数比运行线程数更容易控制。我已经看到即使很小的流量激增也会在使用线程时停止服务器。
  • 更容易同步和/或处理并发

特别受欢迎的解决方案涉及AMQP或键/值数据库,如redismemcached。对于Python中的AMQP,请查看celery,我将它与Django结合使用。