Приложение выглядит (примерно) так:
Код: Выделить всё
import multiprocessing as mp
class Controller:
def _init__():
self.to_queue = mp.Queue()
self.from_queue = mp.Queue()
self.ws_data_client = mp.Process(target=self._start_client)
def _start_client(self):
dcw = DataClientWorker(self.to_queue, self.from_queue) # handles incoming and outgoing msg over websocket
asyncio.run(dcw.run())
def run():
self.ws_data_client.start()
while True:
#do stuff
def main():
controller = Controller()
controller.run()
В разделе # сделать что-нибудь я хочу использовать ускорение графического процессора JAX для выполнения некоторых вычислений над входящими данными. Однако, когда я импортирую JAX и пытаюсь использовать любые функции JAX, я получаю:
RuntimeWarning: был вызван os.fork(). os.fork() несовместим с
многопоточным кодом, а JAX является многопоточным, поэтому это, скорее всего, приведет
к тупику.
Мои вопросы
- Почему именно использование JAX и многопроцессорности приводит к тупик?
- Есть ли обходной путь для этой проблемы?
- Нужно ли мне переписать код, чтобы использовать потоки вместо (много)процессов?
- Каково здесь правильное решение?
Подробнее здесь: https://stackoverflow.com/questions/797 ... iprocesses