mirror of
https://git.yoctoproject.org/poky
synced 2026-09-19 18:49:32 +02:00
bitbake: Use a "fork" multiprocessing context
Python 3.14 changes the default multiprocessing context from "fork" to "forkserver"; however bitbake heavily relies on "fork" to efficiently pass data to the child processes. As such, make "fork" context in the bb namespace and use it in place of the normal multiprocessing module. Note that multiprocessing contexts were added in Python 3.4, so this should be safe to use even before Python 3.14 [YOCTO #15858] (Bitbake rev: 15d7448e04aa78c827d2cef9eb1a62bd6e0dd119) Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> Signed-off-by: Martin Jansa <martin.jansa@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> Signed-off-by: Steve Sakoman <steve@sakoman.com>
This commit is contained in:
committed by
Steve Sakoman
parent
6400741e0c
commit
f00c4968ff
@@ -37,6 +37,34 @@ class BBHandledException(Exception):
|
||||
import os
|
||||
import logging
|
||||
from collections import namedtuple
|
||||
import multiprocessing as mp
|
||||
|
||||
# Python 3.14 changes the default multiprocessing context from "fork" to
|
||||
# "forkserver". However, bitbake heavily relies on "fork" behavior to
|
||||
# efficiently pass data to the child processes. Places that need this should do:
|
||||
# from bb import multiprocessing
|
||||
# in place of
|
||||
# import multiprocessing
|
||||
|
||||
class MultiprocessingContext(object):
|
||||
"""
|
||||
Multiprocessing proxy object that uses the "fork" context for a property if
|
||||
available, otherwise goes to the main multiprocessing module. This allows
|
||||
it to be a drop-in replacement for the multiprocessing module, but use the
|
||||
fork context
|
||||
"""
|
||||
def __init__(self):
|
||||
super().__setattr__("_ctx", mp.get_context("fork"))
|
||||
|
||||
def __getattr__(self, name):
|
||||
if hasattr(self._ctx, name):
|
||||
return getattr(self._ctx, name)
|
||||
return getattr(mp, name)
|
||||
|
||||
def __setattr__(self, name, value):
|
||||
raise AttributeError(f"Unable to set attribute {name}")
|
||||
|
||||
multiprocessing = MultiprocessingContext()
|
||||
|
||||
|
||||
class NullHandler(logging.Handler):
|
||||
|
||||
Reference in New Issue
Block a user