change mp spawn method

mp.Queue is not pickle-able, which prevents spawn method from working,
but is necessary for CUDA to work properly
This commit is contained in:
Christos Falas 2024-12-31 17:49:51 +00:00
parent a2f94737f8
commit 5dd84fb6d6
No known key found for this signature in database
2 changed files with 9 additions and 9 deletions

View File

@ -17,11 +17,10 @@ logging.basicConfig(
class Receiver(NamedTuple): class Receiver(NamedTuple):
ip: ingest.Host ip: ingest.Host
receiver: ingest.FeitReceiver receiver: ingest.FeitReceiver
queue: "mp.Queue[ingest.CSI]"
receivers = [ receivers = [
Receiver(ip, ingest.FeitReceiver(ip), mp.Queue(config.SAMPLE_RATE)) Receiver(ip, ingest.FeitReceiver(ip, mp.Queue(config.SAMPLE_RATE)))
for ip in config.RECEIVE_HOSTS for ip in config.RECEIVE_HOSTS
] ]
@ -30,15 +29,15 @@ transmitter = ingest.FeitTransmitter()
webapp_queue: "mp.Queue[aoa.AoA]" = mp.Queue(config.SAMPLE_RATE) webapp_queue: "mp.Queue[aoa.AoA]" = mp.Queue(config.SAMPLE_RATE)
processor = ingest.CSIProcessor({r.ip: r.queue for r in receivers}, webapp_queue) processor = ingest.CSIProcessor(
{r.ip: r.receiver.processing_queue for r in receivers}, webapp_queue
)
# Start webapp in background process # Start webapp in background process
webapp = mp.Process(target=visualise.start, args=(webapp_queue,)) webapp = mp.Process(target=visualise.start, args=(webapp_queue,))
webapp.start() webapp.start()
receiver_processes = [ receiver_processes = [mp.Process(target=r.receiver.listen) for r in receivers]
mp.Process(target=r.receiver.listen, args=(r.queue,)) for r in receivers
]
for proc in receiver_processes: for proc in receiver_processes:
proc.start() proc.start()

View File

@ -33,7 +33,7 @@ class FeitTransmitter:
class FeitReceiver: class FeitReceiver:
def __init__(self, host: Host): def __init__(self, host: Host, processing_queue: "mp.Queue[CSI]"):
self.host = host self.host = host
self.server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.server.connect(host) self.server.connect(host)
@ -48,8 +48,9 @@ class FeitReceiver:
self.logger = logging.getLogger( self.logger = logging.getLogger(
f"{__name__}.{self.__class__.__name__}-{self.host}" f"{__name__}.{self.__class__.__name__}-{self.host}"
) )
self.processing_queue = processing_queue
def listen(self, queue: "mp.Queue[CSI]"): def listen(self):
prev_time = datetime.now() prev_time = datetime.now()
while True: while True:
# This is the max size of a UDP packet. The size of the actual CSI # This is the max size of a UDP packet. The size of the actual CSI
@ -62,7 +63,7 @@ class FeitReceiver:
f"Received CSI data after {datetime.now() - prev_time}" f"Received CSI data after {datetime.now() - prev_time}"
) )
prev_time = datetime.now() prev_time = datetime.now()
queue.put(csidata) self.processing_queue.put(csidata)
except struct.error: except struct.error:
self.logger.error("Failed to parse CSI data") self.logger.error("Failed to parse CSI data")