Files
swingmusic-extended/swingmusic/utils/threading.py
T
cwilvx 86fabcd5e3 modularize src
+ merge main.py and manage.py
+ move start logic to swingmusic/__main__.py
+ add a run.py on the project root
2025-05-25 20:35:54 +03:00

42 lines
1.1 KiB
Python

import threading
from multiprocessing import Process, Pipe
def background(func):
"""
Runs the decorated function in a background thread.
"""
def background_func(*a, **kw):
threading.Thread(target=func, args=a, kwargs=kw).start()
return background_func
class ProcessWithReturnValue(Process):
"""
A process class that returns a value on join.
Uses a pipe to communicate the return value back to the parent process.
"""
def __init__(
self, group=None, target=None, name=None, args=(), kwargs={}, Verbose=None
):
Process.__init__(self, group=group, target=target, name=name, args=args, kwargs=kwargs)
self._parent_conn, self._child_conn = Pipe()
self._target = target
self._args = args
self._kwargs = kwargs
def run(self):
if self._target is not None:
result = self._target(*self._args, **self._kwargs)
self._child_conn.send(result)
self._child_conn.close()
def join(self, *args):
Process.join(self, *args)
if self._parent_conn.poll():
return self._parent_conn.recv()
return None