我想将不同的参数传递给ThreadPool.apply_async()方法。我该怎么办?我以为是通过以下方式完成的,但是我错了。 我可以改用Thread吗? 预先谢谢你
#!/usr/bin/env python
import multiprocessing
def testMethod(arg1, arg2, arg3):
print(f"{arg1} - {arg2} - {arg3}"
if __name__ == '__main__':
pool = multiprocessing.Pool()
for t in range(1000):
pool.apply_async(testMethod, t, arg2, arg3)
答案 0 :(得分:0)
typeshed中方法签名上的类型提示表明,必须以可迭代方式提供位置参数:
def apply_async(self,
func: (...) -> _T,
args: Iterable = ...,
kwds: Mapping[str, Any] = ...,
callback: Optional[(_T) -> None] = ...,
error_callback: Optional[(BaseException) -> None] = ...)
您对apply_async
的呼叫应如下所示:
pool.apply_async(testMethod, args=(t, 'foo', 'bar'))
或者,使用关键字参数映射:
pool.apply_async(testMethod, kwds={'arg1': t, 'arg2': 'foo', 'arg3': 'bar'})
顺便说一句:您的代码示例不使用线程池; multiprocessing.Pool
是一个代表进程池的类,即,它创建了单独的进程来充当工作进程。
如果要使用线程池,请执行以下操作:
from multiprocessing.pool import ThreadPool
pool = ThreadPool()
该接口类似于进程池的接口。