Konflikt mellem tqdm og multiprocessing på windows ved hjælp af anaconda

Indlæg af Hanne Mølgaard Plasc

Problem



Tilsyneladende opstår der en konflikt mellem tqdm og multiprocessing. Der vises en AttributeError. Jeg giver her et minimalt arbejdseksempel. Det virker på UNIX, men desværre ikke på vinduer. Her er min kode:


 # -*- coding: utf-8 -*-
 from tqdm import tqdm
 from time import sleep
 from tqdm import trange
 from multiprocessing import Pool, freeze\_support, RLock

 L = list(range(9))

def progresser(n):
   interval = 0.001 / (n + 2)
   total = 5000
   text = "#{}, est. {:<04.2}s".format(n, interval * total)
   for i in trange(total, desc=text, position=n):
      sleep(interval)

if \_\_name\_\_ == '\_\_main\_\_':
    freeze\_support()  # for Windows support
    p = Pool(len(L),
             # again, for Windows support
             initializer=tqdm.set\_lock, initargs=(RLock(),))
    p.map(progresser, L)
    print("
" * (len(L) - 2))


En her er sporingen:


Python 3.6.5 | packaged by conda-forge | (default, Apr  6 2018, 
16:13:55) [MSC v.1900 64 bit (AMD64)]
Type "copyright", "credits" or "license" for more information.

IPython 6.3.1 -- An enhanced Interactive Python.


runfile('C:/Users/Downloads/temp.py', 
wdir='C:/Users/Downloads')
Traceback (most recent call last):

File "<ipython-input-1-8046ea5eaef4>", line 1, in <module>
runfile('C:/Users/Downloads/temp.py', 
wdir='C:/Users/Downloads')

File "C:ProgramDataAnaconda3libsite- 
packagesspyderutilssitesitecustomize.py", line 705, in runfile
execfile(filename, namespace)

File "C:ProgramDataAnaconda3libsite- 
packagesspyderutilssitesitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)

File "C:/Users/Downloads/temp.py", line 22, in <module>
p.map(progresser, L)

File "C:ProgramDataAnaconda3libmultiprocessingpool.py", line 
266, in map
return self.\_map\_async(func, iterable, mapstar, chunksize).get()

File "C:ProgramDataAnaconda3libmultiprocessingpool.py", line 
644, in get
raise self.\_value

AttributeError: 'NoneType' object has no attribute 'write'


Jeg skal køre den på Windows-maskinen, da det kræver noget CPU-strøm, som ikke er givet af min notesbog. Jeg er forvirret, fordi jeg i de conda miljøer har installeret de nøjagtig samme biblioteker. Er der en anden måde at vise fremskridt med parallelle beregninger ved hjælp af multiprocessing?

Bedste reference