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:
parent
a2f94737f8
commit
5f6824378c
@ -13,15 +13,16 @@ logging.basicConfig(
|
||||
format="%(asctime)s %(name)-40s %(levelname)-8s %(message)s",
|
||||
)
|
||||
|
||||
mp.set_start_method("spawn")
|
||||
|
||||
|
||||
class Receiver(NamedTuple):
|
||||
ip: ingest.Host
|
||||
receiver: ingest.FeitReceiver
|
||||
queue: "mp.Queue[ingest.CSI]"
|
||||
|
||||
|
||||
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
|
||||
]
|
||||
|
||||
@ -30,15 +31,15 @@ transmitter = ingest.FeitTransmitter()
|
||||
|
||||
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
|
||||
webapp = mp.Process(target=visualise.start, args=(webapp_queue,))
|
||||
webapp.start()
|
||||
|
||||
receiver_processes = [
|
||||
mp.Process(target=r.receiver.listen, args=(r.queue,)) for r in receivers
|
||||
]
|
||||
receiver_processes = [mp.Process(target=r.receiver.listen) for r in receivers]
|
||||
|
||||
for proc in receiver_processes:
|
||||
proc.start()
|
||||
|
||||
@ -33,7 +33,7 @@ class FeitTransmitter:
|
||||
|
||||
|
||||
class FeitReceiver:
|
||||
def __init__(self, host: Host):
|
||||
def __init__(self, host: Host, processing_queue: "mp.Queue[CSI]"):
|
||||
self.host = host
|
||||
self.server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
self.server.connect(host)
|
||||
@ -48,8 +48,9 @@ class FeitReceiver:
|
||||
self.logger = logging.getLogger(
|
||||
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()
|
||||
while True:
|
||||
# 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}"
|
||||
)
|
||||
prev_time = datetime.now()
|
||||
queue.put(csidata)
|
||||
self.processing_queue.put(csidata)
|
||||
except struct.error:
|
||||
self.logger.error("Failed to parse CSI data")
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user