使用concurrent.futures.ThreadPoolExecutor时触发TypeError问题求助
ThreadPoolExecutor提交任务触发TypeError问题解答
问题原因
ThreadPoolExecutor.submit()方法的参数传递规则使用错误,是本次报错的直接诱因:submit方法的标准调用格式为 submit(目标函数, *位置参数, **关键字参数),目标函数的多个入参需要直接按顺序跟在函数名后传递,不需要手动封装为元组。
你代码中的写法是将所有入参打包为一个整体元组传入,相当于仅给thread_func传递了1个元组类型的参数,而你的thread_func本身设计需要接收5个独立的位置参数,参数个数不匹配就会触发TypeError。
修复代码
将提交任务的行修改为如下写法即可:
tasks.append(thread_pool.submit(thread_func, url, url_pool, dataDB, dp, data_catch_info))
额外优化建议
- 可以使用
ThreadPoolExecutor的上下文管理器写法,无需手动销毁线程池,资源释放更安全:with ThreadPoolExecutor(max_workers=2) as thread_pool: # 任务提交逻辑写在上下文内 - 排查任务报错时可以遍历Future对象获取具体异常信息,定位问题更高效:
for future in tasks: try: future.result() except Exception as e: print(f"任务异常详情:{e}")
内容的提问来源于stack exchange,提问作者user17232754
相关产品推荐
相关产品推荐

