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

Celery任务调用time.sleep()报NameError的问题求助

解决Celery异步任务中NameError异常问题

问题核心分析

虽然报错信息指向print_log调用行,但错误提示是name 'sleep' is not defined,且同步调用任务正常、异步调用失败,核心原因大概率是Celery Worker的代码缓存未更新:

  • 同步调用时,直接执行当前IDE中的最新代码;
  • 异步调用时,由独立的Worker进程执行,若Worker未重启,会一直使用启动时加载的旧版本代码(比如你之前的代码中存在sleep未正确导入的情况,后续修改后Worker没同步更新)。

具体解决步骤

  • 强制重启Celery Worker
    停止所有运行中的Worker进程,再重新启动,确保Worker加载最新代码:

    # 查找并终止Celery Worker进程
    ps aux | grep celery | grep -v grep | awk '{print $2}' | xargs kill -9
    # 重新启动Worker(替换为你的项目名)
    celery -A your_project_name worker --loglevel=info
    
  • 检查print_log函数实现
    排查print_log内部是否存在对sleep的引用,或该函数的依赖是否正确导入——旧版本的print_log可能误用了未定义的sleep,导致Worker缓存的代码触发异常。

  • 规范代码导入逻辑
    将所有导入语句移至文件顶部,避免函数/循环内的动态导入,减少作用域和缓存问题:

    import time
    from celery import shared_task
    
    # 确保print_log正确定义或导入
    def print_log(message):
        # 你的日志实现,比如:
        print(message)
    
    @shared_task()
    def testtask(num=100):
        for i in range(num):
            print_log(f"in testtask {i}")
            time.sleep(1)
        return
    
  • 验证代码一致性
    若Worker部署在远程服务器,确认服务器上的代码与本地IDE中的代码完全同步,不存在文件未更新的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:05:13