我应该在使用多处理模块创建的多个进程中访问/共享模块的变量

时间:2018-11-01 11:57:29

标签: python multithreading multiprocessing

我有一个要求,其中我必须保留某些数据(可以是任何pandas数据框或任何ML训练的模型),这些数据始终可用于使用多处理模块创建的所有守护进程。通常,我将不需要修改此数据,而仅使用它。多处理模块提供了各种机制,例如this answer中所述的ValueManager。将此类数据添加到单独的模块并从不同的进程访问它是否有意义,而不是使用ValueArray

common_data.py (包含要由进程共享的通用数据)

worker_specific_conf = None
common_conf = None
list = [1,2,3]

libX.py (包含仅从common_data.py打印信息的功能)

import common_data as cmn
from posix import getpid

def functionX():
    print(str(getpid()) + " : " + str(cmn.worker_specific_conf) + " : " + str(cmn.common_conf))

def functionY():
    print(str(getpid()) + " : " + str(cmn.worker_specific_conf) + " : " + str(cmn.common_conf))

def functionList():
    print(str(getpid()) + " : " + str(cmn.worker_specific_conf) + " : " + str(cmn.list))

def functionDf():
    print(str(getpid()) + " : " + str(cmn.worker_specific_conf) + " : " + str(cmn.df))

workers.py (运行此操作,它将创建多个工作人员,这些工作人员可以使用common_data.pylibX.py访问数据)

import uuid
import libX
import multiprocessing as mu
from time import sleep
import common_data as cmn #
from random import random
import pandas as pd

def worker(a):
    #global my_id  
    sleep(random())
    cmn.worker_specific_conf = uuid.uuid4() # 
    #my_id= uuid.uuid4()
    libX.functionX()
    sleep(random())
    libX.functionY()
    sleep(random())
    libX.functionList()
    sleep(random())
    libX.functionDf()

data = [1,2,3,4,5]
df = pd.DataFrame(data)
cmn.df = df    #adding data to data sharing module dynamically

cmn.common_conf = random()
cmn.list.append(4)
pool = mu.Pool(processes = 2)
pool.map(worker, range(3))

如果我只想能够从不同进程中读取共享数据,这种方法行吗?


输出

6732 : d08673d2-1d8f-4f87-b9ad-d1389ea564d6 : 0.3915408966829501
6732 : d08673d2-1d8f-4f87-b9ad-d1389ea564d6 : 0.3915408966829501
6732 : d08673d2-1d8f-4f87-b9ad-d1389ea564d6 : [1, 2, 3, 4]
12152 : af373f13-35b5-47b2-9736-5b19ee028c9c : 0.3915408966829501
6732 : d08673d2-1d8f-4f87-b9ad-d1389ea564d6 :    0
0  1
1  2
2  3
3  4
4  5
6732 : c629d9c3-f439-4818-ac79-1340f98470ea : 0.3915408966829501
12152 : af373f13-35b5-47b2-9736-5b19ee028c9c : 0.3915408966829501
12152 : af373f13-35b5-47b2-9736-5b19ee028c9c : [1, 2, 3, 4]
6732 : c629d9c3-f439-4818-ac79-1340f98470ea : 0.3915408966829501
12152 : af373f13-35b5-47b2-9736-5b19ee028c9c :    0
0  1
1  2
2  3
3  4
4  5
6732 : c629d9c3-f439-4818-ac79-1340f98470ea : [1, 2, 3, 4]
6732 : c629d9c3-f439-4818-ac79-1340f98470ea :    0
0  1
1  2
2  3
3  4
4  5

0 个答案:

没有答案