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

Python多线程调用时已定义worker函数提示未定义如何解决

报错核心原因及解决方法

你遇到的worker is not defined报错最直接的诱因是缩进错误导致的作用域问题,对应具体问题和修复方案如下:

  1. 函数定义缩进错误
    你提供的worker函数定义行前存在多余的前置缩进,这会让worker不属于全局作用域,而是缩进对应的外层代码块(如其他函数、条件分支等)的局部函数。如果调用pool.map的代码所在的作用域无法访问这个局部函数,就会抛出未定义错误。
    修复方案:将worker函数的缩进调整到和导入语句、work_items列表定义相同的层级,修正后代码如下:
    import subprocess
    # 无多余前置缩进,属于全局作用域
    def worker(tup):
        subprocess.call(tup)
    
  2. 调用位置与函数定义作用域不匹配
    你给出的线程池调用代码前也有额外缩进,说明这段代码是写在某个函数内部的。如果你将worker定义在了其他函数内部,而不是当前调用函数的作用域内,也会触发找不到函数的报错。
    修复方案:如果需要把worker定义为局部函数,要确保它和线程池调用代码处于同一个外层函数的作用域内,示例如下:
    import time
    from multiprocessing.dummy import Pool as ThreadPool
    
    work_items = []
    
    def run_tasks():
        # worker定义在调用函数内部,同作用域可正常访问
        def worker(tup):
            subprocess.call(tup)
        # 执行任务
        start = time.time()
        with ThreadPool(4) as pool:
            work_results = pool.map(worker, work_items)
        end = time.time()
        print(end - start)
    

额外注意:你的代码中用到了subprocess和time模块,需要在文件头部补充对应的导入语句,避免后续运行出现其他类型的报错。你调用的是外部exe程序,不受Python GIL限制,线程池的数量可以根据你的CPU核心数调整,充分利用硬件性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:54:01