Skip to content

Commit 161e5e3

Browse files
committed
refactor: switch mp-method to forkserver globally
1 parent 763f08a commit 161e5e3

File tree

4 files changed

+24
-9
lines changed

4 files changed

+24
-9
lines changed

freqtrade/main.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,12 @@
1818
from freqtrade.constants import DOCS_LINK
1919
from freqtrade.exceptions import ConfigurationError, FreqtradeException, OperationalException
2020
from freqtrade.loggers import setup_logging_pre
21-
from freqtrade.system import asyncio_setup, gc_set_threshold, print_version_info
21+
from freqtrade.system import (
22+
asyncio_setup,
23+
gc_set_threshold,
24+
print_version_info,
25+
set_mp_start_method,
26+
)
2227

2328

2429
logger = logging.getLogger("freqtrade")
@@ -44,6 +49,7 @@ def main(sysargv: list[str] | None = None) -> None:
4449
elif "func" in args:
4550
logger.info(f"freqtrade {__version__}")
4651
gc_set_threshold()
52+
set_mp_start_method()
4753
return_code = args["func"](args)
4854
else:
4955
# No subcommand was issued.

freqtrade/optimize/hyperopt/hyperopt_optimizer.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import sys
88
import warnings
99
from datetime import UTC, datetime
10-
from multiprocessing import Manager, get_all_start_methods, set_start_method
10+
from multiprocessing import Manager
1111
from pathlib import Path
1212
from typing import Any
1313

@@ -125,12 +125,6 @@ def _setup_logging_mp_workaround(self) -> None:
125125
local_queue must be a global and passed to the child process via inheritance.
126126
"""
127127
global log_queue
128-
try:
129-
sms = get_all_start_methods()
130-
if "forkserver" in sms:
131-
set_start_method("forkserver")
132-
except RuntimeError:
133-
pass # start method has already been set
134128
m = Manager()
135129
log_queue = m.Queue()
136130
logger.info(f"manager queue {type(log_queue)}")

freqtrade/system/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
from freqtrade.system.asyncio_config import asyncio_setup
44
from freqtrade.system.gc_setup import gc_set_threshold
5+
from freqtrade.system.set_mp_start_method import set_mp_start_method
56
from freqtrade.system.version_info import print_version_info
67

78

8-
__all__ = ["asyncio_setup", "gc_set_threshold", "print_version_info"]
9+
__all__ = ["asyncio_setup", "gc_set_threshold", "print_version_info", "set_mp_start_method"]
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from multiprocessing import get_all_start_methods, get_start_method, set_start_method
2+
3+
4+
def set_mp_start_method():
5+
"""
6+
Set multiprocessing start method to not be fork.
7+
forkserver will become the default in 3.14 - and is deprecated in 3.13
8+
"""
9+
try:
10+
sms = get_all_start_methods()
11+
if "forkserver" in sms and get_start_method(True) is None:
12+
set_start_method("forkserver")
13+
except RuntimeError:
14+
pass

0 commit comments

Comments
 (0)