希望能分享点相关的代码示例或资料
开始时想用 tqdm 来着,但总有显示串行等奇怪的 bug.
相关代码大致如下:
from tqdm import tqdm
from multiprocessing.dummy import Pool
def dw(url):
r = requests.get(url, stream=True)
size = int(r.headers['Content-Length'])
progress = tqdm(total=size)
with open('file', 'wb') as f:
for chunk in r.iter_content(1024):
progress.update(len(chunck))
f.write(chunck)
progress.close()
pool = Pool(5)
for i in urls:
pool.apply_async(dw,args=(i))
pool.close()
pool.join()
position = 0
def dw(url, path):
r = requests.get(url, headers=HEADERS, proxies=PROXIES, stream=True)
global position
progress = tqdm(
total=int(r.headers['Content-Length']),
# unit='B',
unit_scale=True,
desc=path,
# dynamic_ncols=True,
position=position,
bar_format='{desc}{percentage}',
)
position += 1
with open(path, 'wb') as f:
for chunk in r.iter_content(1024):
progress.update(len(chunk))
f.write(chunk)
progress.close()
pool = Pool(10)
for i in urls:
# i 文件链接
# path 保存路径
inf = pool.apply_async(dw, args=(i, path))
pool.close()
pool.join()
1
mason961125 Aug 17, 2017
如果用多线程下载一个文件,那么下载的只是同一个文件的不同区域,分开显示意义不大。
|
2
rabbbit OP @mason961125 可能我表达有误,同时下载多个文件.
|
3
NoAnyLove Aug 17, 2017 不同线程创建自己的 tqdm 实例,传递不同的 position 参数。话说,你们用库都不看文档的吗?
|
6
SakuraSa Aug 17, 2017 多行的进度条大约需要 curses 来实现(win 下没有原生的 curses)
或者你可以使用别人弄好的,例如 blessings |
8
rabbbit OP |
9
NoAnyLove Aug 17, 2017
|
10
NoAnyLove Aug 17, 2017
@rabbbit 上面给的 issue 的链接有我写的示例代码,需要对创建 tqdm、tqdm.update 和 tqdm.close 都要加锁。另外还有个 position 的小技巧,要从 1 开始
|