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

Python3: How to use set_description with tqdm.contrib.concurrent process_map

我一直在使用 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)

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

是不是因为tqdm.contrib.concurrent的process_map不能和tqdm.tqdm的set_description混用?

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

r = process_map(myfunc, mylist, max_workers=16, desc="My Description")

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

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

import tqdm

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

然后您可以将此习俗 class 传递给 process_map

r = process_map(myfunc, mylist, max_workers=16, tqdm_class=my_tqdm)