Python3:如何将 set_description 与 tqdm.contrib.concurrent process_map 一起使用

use*_*499 5 python parallel-processing tqdm

我一直在使用 tqdm.contrib.concurrent 中的 process_map :https://tqdm.github.io/docs/contrib.concurrent/

如何设置进度条的描述,该进度条在每次迭代中都会发生变化?

我尝试过:(在这里删除了很多代码以简化它......)

from tqdm.contrib.concurrent import process_map 
import tqdm

def myfunc(htmlfile):

    tqdm.tqdm.set_description(htmlfile)

    ### function contents go here

r = process_map(myfunc, mylist, max_workers=16)
Run Code Online (Sandbox Code Playgroud)

但我得到AttributeError: 'str' object has no attribute 'desc'

是因为 process_map fromtqdm.contrib.concurrent不能与 set_description from 混合吗tqdm.tqdm

nik*_*eee 2

编辑process_map接受直接传递给 tqdm 的附加关键字参数列表。这意味着您可以简单地使用附加关键字参数,desc如下所示。

r = process_map(myfunc, mylist, max_workers=16, desc="My Description")
Run Code Online (Sandbox Code Playgroud)

AFAIK,还没有简单的方法可以做到这一点(到目前为止)。但是,process_map需要一个可选参数,tqdm_class您可以使用它来发挥自己的优势(文档)。

您可以创建一个继承默认类的自定义类tqdm.tqdm并相应地设置属性。

import tqdm

class my_tqdm(tqdm.tqdm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.desc = "My Description"
Run Code Online (Sandbox Code Playgroud)

然后您可以将此自定义类传递给process_map

r = process_map(myfunc, mylist, max_workers=16, tqdm_class=my_tqdm)
Run Code Online (Sandbox Code Playgroud)