dissertation/src/__main__.py
Christos Falas 5f6824378c
change mp spawn method
mp.Queue is not pickle-able, which prevents spawn method from working,
but is necessary for CUDA to work properly
2024-12-31 17:52:10 +00:00

49 lines
1.1 KiB
Python

import logging
import multiprocessing as mp
from typing import NamedTuple
from . import ingest
from . import config
from . import visualise
from . import aoa
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(name)-40s %(levelname)-8s %(message)s",
)
mp.set_start_method("spawn")
class Receiver(NamedTuple):
ip: ingest.Host
receiver: ingest.FeitReceiver
receivers = [
Receiver(ip, ingest.FeitReceiver(ip, mp.Queue(config.SAMPLE_RATE)))
for ip in config.RECEIVE_HOSTS
]
# Start injecting CSI frames
transmitter = ingest.FeitTransmitter()
webapp_queue: "mp.Queue[aoa.AoA]" = mp.Queue(config.SAMPLE_RATE)
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) for r in receivers]
for proc in receiver_processes:
proc.start()
processing_thread = mp.Process(target=processor.process_forever)
processing_thread.start()