You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在两个本地端口运行Tornado服务失败问题排查求助

问题分析与修复方案

核心问题排查

  • 未导入并解析Tornado配置:代码中使用define和options但未导入tornado.options模块,也未调用配置解析方法,导致端口变量无法被识别。
  • 子进程未启动IOLoop:Tornado的listen()仅完成端口绑定,必须启动IOLoop才能处理请求,原代码中子进程启动后立即退出,服务未真正运行。
  • 多进程文件写入冲突:两个进程同时写入test.jl,会出现数据覆盖问题。
  • 冗余无效代码:app.settings语句无实际作用,属于无效代码。

修复后的完整代码

import json
import tornado.httpclient
import tornado.web
import tornado.httpserver
import tornado.gen
from tornado.options import define, options, parse_command_line
import logging
import jsonlines
from multiprocessing import Process
import os

class RequestFour(tornado.web.RequestHandler):
    async def get(self):
        client = tornado.httpclient.AsyncHTTPClient()
        response = await client.fetch('https://www.scrapethissite.com/pages/ajax-javascript/?ajax=true&year=2015')
        body = json.loads(response.body)
        
        # 用进程ID生成独立文件,避免多进程覆盖
        file_path = f"test_{os.getpid()}.jl"
        with jsonlines.open(file_path, 'w') as f:
            f.write(body[0])

        self.write(body[0]) 
        self.finish()

def run_server(port):
    parse_command_line()
    app = tornado.web.Application(handlers=[(r'/', RequestFour)])
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(port)
    # 启动IOLoop维持服务运行
    tornado.ioloop.IOLoop.current().start()

if __name__ == '__main__':
    # 主进程统一定义端口配置
    define('port1', default=7010, help="run on port 7010", type=int)
    define('port2', default=6010, help="run on port 6010", type=int)
    parse_command_line()

    p1 = Process(target=run_server, args=(options.port1,))
    p2 = Process(target=run_server, args=(options.port2,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

关键修改说明

  • 配置模块处理:添加tornado.options导入,主进程定义端口配置并解析,子进程同步解析确保变量可用。
  • 统一服务逻辑:将双端口服务合并为run_server函数,通过参数传递端口,消除代码冗余。
  • 启动IOLoop:在子进程中启动IOLoop,保证服务持续运行处理请求。
  • 文件写入优化:基于进程ID生成独立文件名,解决多进程数据覆盖问题。
  • 规范命名:将类名requestFour改为RequestFour,符合Python命名规范。

内容的提问来源于stack exchange,提问作者Dollar Tune-bill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:31:00