在流程之间共享变量

发布于 2021-01-29 14:11:25

我有一个下载器功能,可以并行下载多个文件。我使用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)

是否有一种方法可以设置将在所有这些进程和主进程之间共享的变量,以便每个进程都可以追加刚刚下载的字节数?

关注者
0
被浏览
148
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    解决方案是利用新进程并传递共享的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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看