Я разрабатываю финансовое приложение, которое (косвенно) получает прямую трансляцию из NseIndia каждую секунду с помощью websocket-client.
Структура программы состоит из нескольких задач, выполняемых параллельно.
Все эти задачи требуют одновременной трансляции различных символов в реальном времени.
Каждый символ - это Python объект, содержащий список задач, которые запросили этот символ.
Модуль источника потока получает сотни кормлений каждую секунду. У него есть метод distribute (), который разделяет входящий канал и отправляет его соответствующему символу. Затем символ перераспределяет канал для всех задач, которые в нем нуждаются.
Для достижения такого параллелизма я использовал потоки модуля потоковой передачи python.
Проблема в том, что ЦП не может обрабатывать более 1000 потоков одновременно, выбрасывая
"RuntimeError: can't start new thread"
Полная трассировка:
Exception in thread Thread-6542:
Traceback (most recent call last):
File "C:\Users\PC2\AppData\Local\Programs\Python\Python37-32\lib\threading.py", line 917, in _bootstrap_inner
self.run()
File "C:\Users\PC2\AppData\Local\Programs\Python\Python37-32\lib\threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\PC2\PycharmProjects\Feedtest2\Arena\Cerebelle.py", line 49, in quote_distribute
inx.feed(quote)
File "C:\Users\PC2\PycharmProjects\Feedtest2\Arena\Instrument.py", line 23, in feed
Thread(target=sprite.feed, args=(quote,), daemon=True).start()
File "C:\Users\PC2\AppData\Local\Programs\Python\Python37-32\lib\threading.py", line 847, in start
_start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
Пожалуйста, предложите решение или альтернативный способ сделай это!
Спасибо!
Наглядное представление рабочего процесса