我有我想與對方溝通兩個過程:屬性的子類
文件hwmgr.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
文件main.py:
import hwmgr
hwm = hwmgr.HWManager()
hwm.start()
battery = hwm.get_voltage()
print battery # Works!
所以,有趣的是,這個按預期工作 - 電壓由方法調用返回,沒有任何特殊的多處理魔術。 不過,如果我使那些涉及到記錄器,遇到logger.debug()調用時兩條線,我得到:
AttributeError: 'HWManager' object has no attribute 'logger'
而且,事實上,如果我打印dir(self)
,大約是這裏,這不是」沒有logger
。
我不明白嗎?我的記錄器去哪了?
記錄儀在run()
方法定義的,而不是__init__()
的原因是因爲我的新進程的根記錄後很,而且由於記錄的文件名是由新進程標題取(getproctitle()
)這不能被稱爲後才過程在__init__()
方法完成分叉 - 有可能是另一種方式來做到這一點的一部分,當然,但我還沒有找到它...
在製品代碼:
我已刪除參考文獻e到日誌記錄模塊 - 屬性是什麼並不重要。
如果您註釋掉該行print houdiniAttribute
,一切正常
只要是明確的,合格的返回INT工程 - 消失的屬性是關注
文件hwmgr.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
文件client.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)
文件main.py:
import hwmgr
import client
hwm = hwmgr.HWManager()
hwm.start()
cl = client.HWClient(hwm)
cl.start()
要添加信息到您的問題,請點擊問題下的「編輯」鏈接,而不是發佈新問題並鏈接到原始問題。實際上,原來的問題可能會被視爲「太寬泛」,但如果將其與此嘗試解決方案結合使用(爲簡潔起見,我建議進行一些編輯),而不是我認爲值得的給予好評。 –
[Python多處理設計建議]的可能重複(http://stackoverflow.com/questions/22774756/python-multiprocessing-design-suggestions) –
此外,似乎run方法中添加的任何屬性消失,並且不再可用其他方法訪問。這是一個變量範圍的問題嗎? – BugSpray