# Revision history [back]

I managed to solve this problem (Note to self: Read the python docs). Turns out that a new process thread creates a copy of all the data from the parent, and I had not taken care of this properly.

The way I solved it was thus: I called the Popen (listen_stat in this case) from the device method get_status:

 def get_status(self):
varnum = 0  # for testing only
while not rospy.is_shutdown():
self.new_detect.value = int(self.response_line[varnum])


The important detail was declaring the variable new_detect as a multiprocessing.Value() and then calling this function instead for the multiprocess.

stat_procs = []
for device in device_props:
sp = multiprocessing.Process(target=device.get_status)
stat_procs.append(sp)
sp.start()


The actual publisher then was just called in a normal loop:

try:
while not rospy.is_shutdown():
for device in device_props:
device.device_talker()
except (KeyboardInterrupt,rospy.ROSInterruptException,IOError) as e:
for p in stat_procs:
p.join()


Hope this helps the others.