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

Flask启动新线程报错:RuntimeError: Working outside of request context

解决Flask线程中访问Session的"Working outside of request context"错误

我明白你遇到的问题了——在Flask里启动新线程执行长耗时任务时,直接访问Session会抛出上下文错误,这是因为Flask的请求上下文(包括Session、request等对象)是绑定在处理当前请求的主线程上的,新启动的线程默认不会继承这个上下文,所以不管你用threading.Thread还是thread.start_new_thread,都会触发这个报错。

下面给你两种靠谱的解决方案,按需选择:

方案1:复制请求上下文到新线程(官方推荐)

Flask提供了copy_current_request_context装饰器,可以把当前请求的上下文复制一份到新线程中,这样线程里就能正常访问Session了:

from flask import Flask, session, copy_current_request_context
import threading

app = Flask(__name__)
app.secret_key = 'your-secret-key-here'

@app.route('/start-task')
def start_long_task():
    # 用装饰器复制当前请求上下文
    @copy_current_request_context
    def long_running_task():
        # 这里可以正常访问session了
        current_user_id = session.get('user_id')
        print(f"处理用户 {current_user_id} 的长耗时任务...")
        # 你的任务逻辑写在这里,比如数据库操作、API调用等
        # ...
    
    # 启动线程
    threading.Thread(target=long_running_task).start()
    return "长耗时任务已启动,后台处理中"

注意:如果你的任务执行时间特别长,要考虑请求结束后上下文资源是否会被回收,这种情况下更推荐下面的方案。

方案2:直接传递Session中的所需数据(更轻量)

如果你的任务只需要Session里的特定数据(比如用户ID),没必要复制整个上下文,直接把这些数据作为参数传给线程函数即可,既高效又避免上下文依赖:

from flask import Flask, session
import threading

app = Flask(__name__)
app.secret_key = 'your-secret-key-here'

@app.route('/start-task')
def start_long_task():
    # 先从Session中取出需要的数据
    user_id = session.get('user_id')
    username = session.get('username')
    
    # 定义任务函数,接收所需参数
    def long_running_task(user_id, username):
        print(f"用户 {username}(ID:{user_id})的任务开始执行...")
        # 你的任务逻辑,直接使用传入的参数,无需访问Session
        # ...
    
    # 启动线程,传入参数
    threading.Thread(target=long_running_task, args=(user_id, username)).start()
    return "长耗时任务已启动,后台处理中"

为什么你的两种方法会失败?

不管是threading.Thread(target=lambda: fn(**args)).start()还是thread.start_new_thread(fn, (), args),新线程都没有继承主线程的请求上下文,当fn内部尝试访问session时,Flask找不到当前的请求上下文,就会抛出RuntimeError: Working outside of request context.。

内容的提问来源于stack exchange,提问作者Ry Rith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:11:06