代码之家  ›  专栏  ›  技术社区  ›  raaj

python多进程处理池-每个进程共享一个变量?

  •  0
  • raaj  · 技术社区  · 6 年前

    import multiprocessing
    import time
    
    data = (
        {"var":1, "shared": None}, {"var":2, "shared": None}, {"var":3, "shared": None}, {"var":4, "shared": None}
    )
    
    def mp_worker(input):
        print input
        # print " Processs %s\tWaiting %s seconds" % (inputs, the_time)
        # time.sleep(int(the_time))
        # print " Process %s\tDONE" % inputs
    
    def mp_handler():
        p = multiprocessing.Pool(2)
        p.map(mp_worker, data)
    
    if __name__ == '__main__':
        mp_handler()
    

    from multiprocessing import Pool, Process
    
    class Worker(Process):
        def __init__(self):
            print 'Worker started'
            # do some initialization here
            super(Worker, self).__init__()
    
        def compute(self, data):
            print 'Computing things!'
            return data * data
    
    
    if __name__ == '__main__':
        # This works fine
        worker = Worker()
        #print worker.compute(3)
    
        # workers get initialized fine
        pool = Pool(processes = 4,
                    initializer = Worker)
        data = range(10)
        # How to use my worker pool?
        # result = pool.map(Worker.compute, data)
    
        result = pool.map(Worker.compute, data)
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   gbtimmon    6 年前

    使用共享类型:

    from multiprocessing import Process, Lock
    from multiprocessing.sharedctypes import Value
    from ctypes import Structure, c_double
    
    class Point(Structure):
        _fields_ = [('x', c_double), ('y', c_double)]
    
    def modify(parmMap):
        parmMap['point'].x = parmMap['var']
        parmMap['point'].y = parmMap['var'] * 2
    
    
    if __name__ == '__main__':
        lock = Lock()
    
        data = ( {'var' : 1, 'shared' : Value(Point, (0,0), lock=lock) },
                 {'var' : 2, 'shared' : Value(Point, (0,0), lock=lock) },
                 {'var' : 3, 'shared' : Value(Point, (0,0), lock=lock) },
                 {'var' : 4, 'shared' : Value(Point, (0,0), lock=lock) }
        )
    
        p = multiprocessing.Pool(2)
        print p.map(mp_worker, data)
        print data
    
        2
  •  0
  •   Pang Ajmal PraveeN    6 年前
    def init(args, num_gpu):
        pid = int(str(multiprocessing.current_process()).split(" ")[0].split("-")[-1].split(",")[0]) - 1
        gpu_id = pid % num_gpu
        global testModule
        testModule = TestModuleShared(args, gpu_id)
    
    def worker(datum):
        pid = int(str(multiprocessing.current_process()).split(" ")[0].split("-")[-1].split(",")[0]) - 1
        params = datum["params"]
        # print str(datum["fc"]) + " " + str(pid) 
        # print testModule.openpose
    
        # Reset State
        testModule.run()
    
    p = multiprocessing.Pool(per_gpu_threads*num_gpu, initializer=init, initargs=(params["test_module_param"],num_gpu,))