Ho una funzione di downloader che scarica più file in parallelo. Io uso multiprocessing.Pool.map_async
per scaricare pezzi diversi dello stesso file. Vorrei mostrare una barra di stato del download. Per questo, ho bisogno di conoscere i byte totali che sono già stati scaricati (total_bytes_dl
).Condivisione di una variabile tra processi
pool = multiprocessing.Pool(processes)
mapObj = pool.map_async(f, args)
while not mapObj.ready():
status = r"%.2f MB/%.2f MB" % (total_bytes_dl/1024.0/1024.0, filesize/1024.0/1024.0,)
status = status + chr(8)*(len(status)+1)
print status,
time.sleep(0.5)
C'è un modo per impostare una variabile che verrà condivisa tra tutti questi processi e il processo principale, in modo che ogni processo può accodare la quantità di byte che ha appena scaricato?
non è possibile mappare l'oggetto condiviso ctypes: 'RuntimeError: gli oggetti sincronizzati devono essere condivisi solo tra processi tramite l'ereditarietà ' – iTayb