我有两个流程需要相互沟通:
文件硬件管理器.py公司名称:
import multiprocessing as mp
from setproctitle import setproctitle
import smbus
import myLoggingModule as log
class HWManager(mp.Process):
def __init__(self):
mp.Process.__init__(self)
self.i2c_lock = mp.Lock()
def run(self):
setproctitle('hwmgr')
# self.logger = log.config_logger(**kwargs)
def get_voltage(self):
with self.i2c_lock:
# ...do i2c stuff to get a voltage with smbus module
# self.logger.debug('Got a voltage: %s', voltage)
return voltage
文件主.py公司名称:
^{pr2}$因此,有趣的是,这和预期的一样工作,电压由方法调用返回,而不需要任何特殊的多处理向导。 但是,如果我启用涉及记录器的两行,当logger.debug()遇到呼叫,我得到:
AttributeError: 'HWManager' object has no attribute 'logger'
而且,实际上,如果我打印一个dir(self)
,它就没有logger
。
我不明白??我的记录器去哪儿了?
之所以在run()
方法中定义记录器,而不是__init__()
,是因为我在新进程的根日志记录器后面,并且因为记录器的文件名取自新进程的标题(getproctitle()
),直到进程在__init__()
方法完成时分叉后才能调用——可能还有另一种方法当然要做这部分,但我还没找到。。。
WIP代码:
我删除了对日志模块的引用-属性是什么并不重要。
如果您注释掉print houdiniAttribute
行,则一切都按预期工作
为了清楚起见,传递一个return int是有效的-正在消失的属性是个问题
文件硬件管理器.py公司名称:
import multiprocessing as mp
from setproctitle import setproctitle
import smbus
class HWManager(mp.Process):
def __init__(self):
mp.Process.__init__(self)
self.i2c_lock = mp.Lock()
def run(self):
setproctitle('hwmgr')
self.houdiniAttribute = 'ASDFGHJKL'
with self.i2c_lock:
pass # Set up I2C bus to take ADC readings
while True: # Doesn't matter if this is here...
pass
def get_voltage(self):
with self.i2c_lock:
voltage = 12.0 # Actually, do i2c stuff to get a voltage with smbus module
print self.houdiniAttribute
return voltage
文件客户端.py公司名称:
import multiprocessing as mp
from setproctitle import setproctitle
from time import sleep
class HWClient(mp.Process):
def __init__(self, hwm):
mp.Process.__init__(self)
self.hwm = hwm
def run(self):
setproctitle('client')
while True:
battery = self.hwm.get_voltage()
print battery
sleep(5)
文件主.py公司名称:
import hwmgr
import client
hwm = hwmgr.HWManager()
hwm.start()
cl = client.HWClient(hwm)
cl.start()
试图澄清:
run()
在同一类的另一个对象(object2)上被调用。在run()
为对象2分配属性。在如果你想让事情同步化,看看经理们。 Multiprocessing Share Unserializable Objects Between Processes
这能回答你的问题吗?在
相关问题 更多 >
编程相关推荐