【问题标题】:Tornado ioloop + threadingTornado ioloop + 线程
【发布时间】:2015-05-20 18:28:29
【问题描述】:

我一直在研究 tornado web 框架,但我仍然没有清楚地理解 ioloop 的功能,尤其是如何在多线程中使用它。 是否可以为多个服务器创建单独的 ioloop 实例??

【问题讨论】:

    标签: python http tornado web-frameworks


    【解决方案1】:

    绝大多数 Tornado 应用程序应该只有一个 IOLoop,在主线程中运行。您可以在同一个 IOLoop 上运行多个 HTTPServer(或其他服务器)。

    可以创建多个 IOLoop 并为每个 IOLoop 分配自己的线程,但这很少有用,因为 GIL 确保一次只运行一个线程。如果您确实使用多个 IOLoop,则必须小心确保不同的线程仅通过线程安全方法(即 IOLoop.add_callback)相互通信。

    【讨论】:

    • 谢谢 Ben,您能否提供更多有关 IOLoop 类及其方法的信息。我无法清楚地理解 ioloop 的 instance()、current()、make_current() 方法的使用。谢谢。
    • 一般来说,你应该使用 current() 来获取活跃的 IOLoop。 instance() 的存在主要是为了向后兼容(尽管它有时在有多个 IOLoop 时很有用)。很少需要使用 make_current();它主要用于创建和销毁许多 IOLoop 的测试等情况。
    • 只是好奇,instance()current()如果有IOLoop就不新建一个IOLoop如何实现“一个线程一个IOLoop”?
    • 在启动每个线程时使用 IOLoop() 创建一个新的 ioloop,它将变为 current()。
    猜你喜欢
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    相关资源
    最近更新 更多