Share a list between different processes?

前端 未结 2 1125
你的背包
你的背包 2020-12-05 11:23

I have the following problem. I have written a function that takes a list as input and creates a dictionary for each element in the list. I then want to append this dictiona

2条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-05 12:10

    One way is to use a manager object and create your shared list object from it:

    from multiprocessing import Manager, Pool
    
    input_list = ['A', 'B', 'C', 'D', 'E', 'F']
    
    manager = Manager()
    shared_list = manager.list()
    
    def do_stuff(element):
        global shared_list
        element_dict = {}
        element_dict['name'] = element
        shared_list.append(element_dict)
        if len(shared_list) > 3:
            print('list > 3')
    
    pool = Pool(processes=6)
    pool.map(do_stuff, input_list)
    pool.close()
    

    Remember, unlike threads, processes do not share memory space. (When spawned, each process gets its own copy of the memory footprint of the spawning process, and then runs with it.) So they can only communicate via some form of IPC (interprocess communication). In Python, one such method is multiprocessing.Manager and the data structures it exposes, e.g. list or dict. These are used in code as easily as their built-in equivalents, but under the hood utilize some form of IPC (sockets probably).

提交回复
热议问题