fix parallel example extra line

- closes #477
- partially reverts 74e6eba
- Note 74e6eba breaks unit tests/behaviour for non-parallel cases.
  Automation for parallel cases is not possible since
  `tqdm.tqdm._instances` may not be populated in individual threads.
This commit is contained in:
Casper da Costa-Luis 2018-04-29 23:52:30 +01:00
parent 74e6eba4ef
commit 32cde6fdd2
No known key found for this signature in database
GPG Key ID: 986B408043AE090D
2 changed files with 18 additions and 7 deletions

View File

@ -1,6 +1,6 @@
from __future__ import print_function
from time import sleep
from tqdm import tqdm
from tqdm import tqdm, trange
from multiprocessing import Pool, freeze_support, RLock
@ -11,7 +11,10 @@ def progresser(n):
interval = 0.001 / (len(L) - n + 2)
total = 5000
text = "#{}, est. {:<04.2}s".format(n, interval * total)
for _ in tqdm(range(total), desc=text, position=n):
# NB: ensure position>0 to prevent printing '\n' on completion.
# `tqdm` can't autmoate this since this thread
# may not know about other bars in other threads #477.
for _ in tqdm(range(total), desc=text, position=n + 1):
sleep(interval)
@ -21,9 +24,15 @@ if __name__ == '__main__':
initializer=tqdm.set_lock,
initargs=(RLock(),))
p.map(progresser, L)
print("\n" * len(L))
print('\n' * len(L))
# alternatively, on UNIX, just use the default internal lock
p = Pool(len(L))
p.map(progresser, L)
print("\n" * len(L))
print('\n' * len(L))
# a manual test demonstrating automatic fix for #477 on one thread
for _ in trange(10, desc="1", position=1):
for _ in trange(10, desc="2", position=0):
sleep(0.01)
print('\n')

View File

@ -1107,13 +1107,15 @@ Please use `tqdm_gui(...)` instead of `tqdm(..., gui=True)`
# stats for overall rate (no weighted average)
self.avg_time = None
self.sp(self.__repr__())
if pos is not None:
if pos:
self.moveto(-pos)
else:
elif not max([abs(getattr(i, "pos", 0))
for i in self._instances] + [0]):
# only if not nested (#477)
fp_write('\n')
else:
self.sp('') # clear up last bar
if pos is not None:
if pos:
self.moveto(-pos)
else:
fp_write('\r')