diff --git a/data/internal_config/fhdhr.ini b/data/internal_config/fhdhr.ini index 639ada2..4e11cb0 100644 --- a/data/internal_config/fhdhr.ini +++ b/data/internal_config/fhdhr.ini @@ -1,6 +1,7 @@ [main] uuid = cache_dir = +thread_method = multiprocessing [fhdhr] address = 0.0.0.0 diff --git a/fHDHR/cli/run.py b/fHDHR/cli/run.py index 9ee7426..f7c9d8f 100644 --- a/fHDHR/cli/run.py +++ b/fHDHR/cli/run.py @@ -3,6 +3,7 @@ import sys import argparse import time import multiprocessing +import threading import platform from fHDHR import fHDHR_VERSION, fHDHR_OBJ @@ -42,25 +43,33 @@ def run(settings, logger, db): fhdhr = fHDHR_OBJ(settings, logger, db) fhdhrweb = fHDHR_HTTP_Server(fhdhr) - # Ensure spawn on Windows instead of fork - if settings.dict["main"]["opersystem"] in ["Windows"]: - multiprocessing.set_start_method('spawn') - try: print("HTTP Server Starting") - fhdhr_web = multiprocessing.Process(target=fhdhrweb.run) - fhdhr_web.start() + if settings.dict["main"]["thread_method"] in ["multiprocessing"]: + fhdhr_web = multiprocessing.Process(target=fhdhrweb.run) + elif settings.dict["main"]["thread_method"] in ["threading"]: + fhdhr_web = threading.Thread(target=fhdhrweb.run) + if settings.dict["main"]["thread_method"] in ["multiprocessing", "threading"]: + fhdhr_web.start() if settings.dict["fhdhr"]["discovery_address"]: print("SSDP Server Starting") - fhdhr_ssdp = multiprocessing.Process(target=fhdhr.device.ssdp.run) - fhdhr_ssdp.start() + if settings.dict["main"]["thread_method"] in ["multiprocessing"]: + fhdhr_ssdp = multiprocessing.Process(target=fhdhr.device.ssdp.run) + elif settings.dict["main"]["thread_method"] in ["threading"]: + fhdhr_ssdp = threading.Thread(target=fhdhr.device.ssdp.run) + if settings.dict["main"]["thread_method"] in ["multiprocessing", "threading"]: + fhdhr_ssdp.start() if settings.dict["epg"]["method"]: print("EPG Update Starting") - fhdhr_epg = multiprocessing.Process(target=fhdhr.device.epg.run) - fhdhr_epg.start() + if settings.dict["main"]["thread_method"] in ["multiprocessing"]: + fhdhr_epg = multiprocessing.Process(target=fhdhr.device.epg.run) + elif settings.dict["main"]["thread_method"] in ["threading"]: + fhdhr_epg = threading.Thread(target=fhdhr.device.epg.run) + if settings.dict["main"]["thread_method"] in ["multiprocessing", "threading"]: + fhdhr_epg.start() # wait forever while True: diff --git a/fHDHR/config/__init__.py b/fHDHR/config/__init__.py index efb37e6..2e04a7a 100644 --- a/fHDHR/config/__init__.py +++ b/fHDHR/config/__init__.py @@ -89,6 +89,9 @@ class Config(): def config_verification(self): + if self.dict["main"]["thread_method"] not in ["threading", "multiprocessing"]: + raise fHDHR.exceptions.ConfigurationError("Invalid Threading Method. Exiting...") + if self.dict["main"]["required"]: required_missing = [] if isinstance(self.dict["main"]["required"], str): diff --git a/requirements.txt b/requirements.txt index 5b0f3cb..c49cb72 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,5 +4,5 @@ flask image xmltodict sqlalchemy -pycrypto +pycryptodome m3u8