在python中的工作人员和模块之间共享公共和特定于工作人员的信息

时间:2018-10-08 11:28:30

标签: python multithreading multiprocessing

我有一台服务器,该服务器首先执行一些“初始配置”(可以从用户那里接受它,也可以从命令行读取)。

然后,服务器派生多个相同类型的工作程序。然后,每个工作人员都会执行一些特定于工作人员的初始配置。

工作人员从不同的模块调用多个功能。

我希望每个功能都能够访问服务器执行的初始配置(此配置在所有worker的所有模块的所有功能中都是相同的)和特定于其自己worker的配置。

我应该怎么做?我应该将此配置信息作为参数传递给所有功能,还是应该有一个保存此配置的文件。我尝试了如下的简单代码:

thread_module

server_worker.py

import uuid
import libX
import multiprocessing as mu
from time import sleep
import thread_module_config as conf #
from random import random

def worker(a):
    sleep(random())
    conf.worker_specific_conf = uuid.uuid4() # 
    libX.functionX()
    sleep(random())
    libX.functionY()
    sleep(random())

conf.common_conf = random()
pool = mu.Pool(processes = 2)
pool.map(worker, range(3))

libX.py

import thread_module_config as conf #
from posix import getpid

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

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

thread_module_config.py

worker_specific_conf = None
common_conf = None

示例输出

15764 : 53c66e78-204c-49c5-befe-6f4db765593b : 0.7694252432785341
15764 : 53c66e78-204c-49c5-befe-6f4db765593b : 0.7694252432785341
14276 : 10dc5cfd-bac6-48d2-9343-33dca10f5ffc : 0.7694252432785341
15764 : 5210bb8e-feb7-4d13-9ff9-88b5461ee67b : 0.7694252432785341
14276 : 10dc5cfd-bac6-48d2-9343-33dca10f5ffc : 0.7694252432785341
15764 : 5210bb8e-feb7-4d13-9ff9-88b5461ee67b : 0.7694252432785341

如您所见,通用配置0.7694252432785341在工作进程,模块之间是相同的。但是,即使每个函数与其他线程中的函数间歇运行,每个函数也只能访问特定于该工作程序的uuid。

这是实现我正在做的事情的正确方法吗?还是有其他标准方法可以实现这一目标?

0 个答案:

没有答案