将不同的参数传递给 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()
界面与进程池类似
我想将不同的参数传递给 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()
界面与进程池类似