python - python多处理包装tornado.ioloop
问题描述
我对python的多重处理真的很陌生,我对异步调用、yield等有一些概念……最基本的东西。我来到这个片段,其中 multiprocessing.Process 环绕 tornado.ioloop.IOLoop.instance
# 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
我对这两个库都没有经验,也不知道如何修复它。谁能帮帮我吗?
解决方案
这是一个不寻常的模式——如果你正在编写一个新的应用程序,我不建议你复制它。
如果您只是尝试运行执行此操作的应用程序(看起来它来自这里),问题是 IOLoops 无法安全地跨越进程边界(在某些平台上它有时可以工作,但并非总是如此)。要重写此代码以在子进程中正确创建应用程序和 IOLoop,您可以执行以下操作:
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
在两个进程之间共享。
推荐阅读
- here-api - HERE Playground 和 REST 连接器结果之间的差异
- c - 共享内存系统VC中的矩阵问题
- c - C 程序执行但以“进程返回 2097152 (0x200000) 执行时间:12.976 秒”结束
- python - 我使用 pyglets Sprite.delete() 错了吗?
- javascript - 如何格式化日期
- scheme - 使用 script-fu 将图像插入到带有 GIMP(2.10) 的图层中
- c++ - 在 C++ 中删除特定的预取文件
- java - hdfs dfs 命令:连接异常失败:java.net.ConnectException:连接被拒绝
- html - CSS 格式不正确
- c# - 是否可以将两位小数分配给双精度