Python使用ThreadPoolExecutor.submit时出现缺少必填位置参数错误如何解决
问题根因
- 调用
ThreadPoolExecutor.submit()时,错误将目标函数的入参整体包裹为一个元组传入,submit会将你传入的每个后续参数直接透传给目标函数,你包裹元组后相当于只给returnSomething传递了1个位置参数(该元组本身),因此触发参数缺失报错。 - 额外传入的
TestClass类对象属于冗余参数,无任何作用。
修复方案
仅需修改异步调用的submit传参逻辑,移除参数外层的元组包裹、删除冗余的TestClass即可,修改后代码如下:
testClass = TestClass() # 参数按顺序直接传给submit,不需要包裹元组 async_result=GlobalValues.getThreadPoolExecutor().submit(testClass.returnSomething, "a", "b") val = async_result.result()
原理说明
你传入的testClass.returnSomething是已经绑定了实例的方法,self会自动传入,无需手动传递,submit方法接收可调用对象后,后续的所有位置参数都会按顺序透传给该方法,直接依次传入param1、param2对应的值即可。
内容的提问来源于stack exchange,提问作者cyber101
相关产品推荐
相关产品推荐

