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