首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python多处理包装tornado.ioloop

python多处理包装tornado.ioloop
EN

Stack Overflow用户
提问于 2020-02-26 03:00:25
回答 1查看 176关注 0票数 0

我对python的多重处理还是个新手,我对异步调用、yield和etc...the这类最基本的东西有一些概念。我看到了这段代码,其中multiprocessing.Process对tornado.ioloop.IOLoop.instance进行了包装

代码语言:javascript
复制
    # Set up the tornado web app
    app = make_app(predicted_model_queue)
    app.listen(8080)
    server_process = Process(target=tornado.ioloop.IOLoop.instance().start)
    # Start up the server to expose the metrics.
    server_process.start()

它打算将tornado服务器作为server_process启动,但代码不起作用。我得到了错误,

OSError: [Errno 9] Bad file descriptor

我没有使用这两个库的经验,也不知道如何修复它。有谁能帮帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2020-02-26 22:47:02

这是一个不同寻常的模式--如果你正在编写一个新的应用程序,我不建议你复制它。

如果你只是试图运行一个能做到这一点的应用程序(看起来像是来自here),问题是IOLoops不能安全地跨越进程边界(在某些平台上,它有时可以工作,但并不总是有效)。要重写此代码以在子进程中正确创建应用程序和IOLoop,您可以执行以下操作:

代码语言:javascript
复制
def run_server():
    app = make_app(predicted_model_queue)
    app.listen(8080)
    tornado.ioloop.IOLoop.current().start()
server_process = Process(target=run_server)
server_process.start()

这样,只有predicted_model_queue在两个进程之间共享。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60401509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档