Python multiprocessing.Pool.apply_async 中使用 tqdm 添加进度条
要在`pool.apply_async`中添加进度条,我们可以使用`tqdm`库来实现。`tqdm`是一个用于在循环中显示进度条的库。\n\n首先,我们需要导入所需的库:\n\npython\nfrom multiprocessing import Pool\nfrom tqdm import tqdm\n\n\n然后,我们定义一个用于跟踪进度的函数。这个函数将包装我们的`apply_async`调用,并使用`tqdm`来显示进度条。\n\npython\ndef track_progress(func, iterable):\n pbar = tqdm(total=len(iterable))\n\n def update(*args):\n pbar.update()\n\n pool = Pool()\n for item in iterable:\n pool.apply_async(func, args=(item,), callback=update)\n \n pool.close()\n pool.join()\n pbar.close()\n\n\n在这个函数中,我们创建了一个`tqdm`对象`pbar`,并将其总数设置为输入`iterable`的长度。然后,我们定义了一个内部函数`update`,它会在每次任务完成时调用`tqdm`的`update`方法来更新进度条。\n\n接下来,我们创建一个`Pool`对象,并使用`apply_async`来异步执行任务。在每次任务完成时,我们调用`update`函数来更新进度条。\n\n最后,我们关闭`Pool`并等待所有任务完成,然后关闭进度条。\n\n要使用这个跟踪进度的函数,我们只需将要执行的函数和输入迭代器作为参数传递给它:\n\npython\ndef my_function(item):\n # 执行任务的代码\n\ninput_data = range(10)\ntrack_progress(my_function, input_data)\n\n\n这样,我们将在`Pool.apply_async`的执行过程中看到一个进度条。
原文地址: https://www.cveoy.top/t/topic/pPia 著作权归作者所有。请勿转载和采集!