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",
|
format="%(asctime)s %(name)-40s %(levelname)-8s %(message)s",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
mp.set_start_method("spawn")
|
||||||
|
|
||||||
|
|
||||||
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 +31,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()
|
||||||
|
|||||||
@ -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")
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user