You need to enable JavaScript to run this app. 使用multiprocessing配合BaseHTTPRequestHandler出现_thread.lock报错
优惠活动
大模型
产品
解决方案
定价
更多

使用multiprocessing配合BaseHTTPRequestHandler出现_thread.lock报错

问题原因
  • Python multiprocessing模块在创建子进程时(macOS/Windows默认使用spawn启动模式),需要将传递给子进程的所有对象做序列化(pickle)处理。而ThreadingHTTPServer内部内置了和系统线程绑定的_thread.lock锁对象,这类对象无法被序列化,直接传递就会抛出你遇到的报错。
  • 你不需要将HTTP服务实例交给multiprocessing.Manager管理,Manager仅用于多进程间共享状态变量,HTTP服务只需要在子进程内独立运行即可,不需要跨进程共享实例。
  • 你选用的ThreadingHTTPServer本身就是基于线程实现请求并发的,和你不想使用threading模块的需求冲突。
修复后代码
import multiprocessing
from http.server import HTTPServer, BaseHTTPRequestHandler

# 自定义RequestHandler实现业务逻辑
class CustomRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.end_headers()
        self.wfile.write(b"test response")

def run_http_server():
    # 服务实例在子进程内部初始化,不需要跨进程传递
    httpd = HTTPServer(('localhost', 4433), CustomRequestHandler)
    httpd.serve_forever()

if __name__ == '__main__':
    running_server = multiprocessing.Process(target=run_http_server)
    running_server.start()
    # 主进程可执行其他逻辑,需要停止服务时调用 running_server.terminate()
生产级工具库推荐
  • Gunicorn:成熟的WSGI服务器,原生支持多进程工作模式,无需手动管理进程,简单配置即可实现真正的并行请求处理,适合正式环境部署同步Web服务。
  • Uvicorn:ASGI服务首选服务器,支持多进程启动,同时兼容异步、同步业务逻辑,性能表现优异,适合FastAPI、新版Django等异步框架使用。
  • 手动基于http.server封装的服务仅适合本地调试用,不要用于生产环境,其性能、安全性都没有经过生产验证。

内容的提问来源于stack exchange,提问作者Ryan Nygard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 13:36:05