iTa*_*ayb 7 python ctypes map multiprocessing
我有一个下载器功能,可以并行下载多个文件.我用multiprocessing.Pool.map_async
它来下载同一文件的不同块.我想显示下载的状态栏.为此,我需要知道已经下载的总字节数(total_bytes_dl
).
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)
Run Code Online (Sandbox Code Playgroud)
有没有办法设置一个将在所有这些进程和主进程之间共享的变量,因此每个进程都可以附加刚刚下载的字节数量?
解决方案是启动新进程并传递共享的 ctypes 值:
from ctypes import c_int
import dummy
shared_bytes_var = multiprocessing.Value(c_int)
def Func(...):
....
pool = multiprocessing.Pool(initializer=_initProcess,initargs=(shared_bytes_var,))
....
def _initProcess(x):
dummy.shared_bytes_var = x
Run Code Online (Sandbox Code Playgroud)