将不同的参数传递给 python 中的 ThreadPool.apply_async() 方法

Pass different arguments to ThreadPool.apply_async() method in python

我想将不同的参数传递给 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)

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 是一个 class,代表一个 进程 池,即这会创建单独的进程来充当工作人员。
如果您想使用线程池,请选择:

from multiprocessing.pool import ThreadPool
pool = ThreadPool()

界面与进程池类似