将不同的参数传递给ThreadPool.apply\u异步()python中的方法

2024-09-28 21:10:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把不同的论点传递给ThreadPool.apply\u异步()方法。我怎么做?我以为是用下面的方法做的,但我错了。 我可以用线代替吗? 提前谢谢你

#!/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)

Tags: 方法importenvbinusrmultiprocessingarg3apply
1条回答
网友
1楼 · 发布于 2024-09-28 21:10:06

typeshed中方法签名的类型提示表明,必须以iterable的形式提供positional参数:

def apply_async(self,
                func: (...) -> _T,
                args: Iterable = ...,
                kwds: Mapping[str, Any] = ...,
                callback: Optional[(_T) -> None] = ...,
                error_callback: Optional[(BaseException) -> None] = ...)

您对apply_async的调用应该如下所示:

^{pr2}$

或者,使用关键字参数映射:

pool.apply_async(testMethod, kwds={'arg1': t, 'arg2': 'foo', 'arg3': 'bar'})

顺便说一句:您的代码示例不使用线程池;multiprocessing.Pool是一个表示进程池的类,即创建单独的进程来充当工作线程。
如果要使用线程池,请选择:

from multiprocessing.pool import ThreadPool
pool = ThreadPool()

该接口类似于进程池的接口。在

相关问题 更多 >