@Melograno

Ошибка RuntimeError: can't start new thread на Python (MacBook Pro M1 2020 ОЗУ 8 Гб) как настроить или обойти?

Я не являюсь програмистом и знания очень скудные по данной теме.
Передо мной стоит задача выгрузить исторические данные из Yahoo Finance.
Для этого использую Python и конкретно библиотеку yf.download
Код верный, так как у преподавателя все работает, НО! он использует ПК на Windows,  у меня же MacBook Pro (M1 2020 ОЗУ 8 Гб).
Необходимо выгрузить данные по 4933 акциям, и когда доходит примерно до 2000 процесс останавливается и не идет дальше. и выскакивает ошибка RuntimeError: can't start new thread
Я думаю, что проблема в компьютере (логично предположить).

Если кто-нибудь знает, как это обойти (без смены компьютера), пожалуйста, напишите.

на этом сайте был вопрос, но решение не подошло

код:
nasdaq_stocks = yf.download(tickers = nasdaq_tickers, period = 'max', interval = '1d', group_by = 'ticker')


Результат:
[                       0%                       ]  13 of 4933 completed
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
Input In [25], in <cell line: 1>()
----> 1 nasdaq_stocks = yf.download(tickers = nasdaq_tickers, period = 'max', interval = '1d', group_by = 'ticker')

File ~/opt/anaconda3/lib/python3.8/site-packages/yfinance/multi.py:105, in download(tickers, start, end, actions, threads, group_by, auto_adjust, back_adjust, progress, period, show_errors, interval, prepost, proxy, rounding, timeout, **kwargs)
    103 _multitasking.set_max_threads(threads)
    104 for i, ticker in enumerate(tickers):
--> 105     _download_one_threaded(ticker, period=period, interval=interval,
    106                            start=start, end=end, prepost=prepost,
    107                            actions=actions, auto_adjust=auto_adjust,
    108                            back_adjust=back_adjust,
    109                            progress=(progress and i > 0), proxy=proxy,
    110                            rounding=rounding, timeout=timeout)
    111 while len(shared._DFS) < len(tickers):
    112     _time.sleep(0.01)

File ~/opt/anaconda3/lib/python3.8/site-packages/multitasking/__init__.py:119, in task.<locals>.async_method(*args, **kwargs)
    116     single = config["POOLS"][config["POOL_NAME"]]['engine'](
    117         target=_run_via_pool, args=args, kwargs=kwargs)
    118 config["TASKS"].append(single)
--> 119 single.start()
    120 return single

File ~/opt/anaconda3/lib/python3.8/threading.py:852, in Thread.start(self)
    850     _limbo[self] = self
    851 try:
--> 852     _start_new_thread(self._bootstrap, ())
    853 except Exception:
    854     with _active_limbo_lock:

RuntimeError: can't start new thread

[********************  41%                       ]  2033 of 4933 completed
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
ScriptKiddo
@ScriptKiddo
Попробуйте выставить параметр threads в False, чтобы грузить в один поток или числом укажите нужное количество потоков. Например: 10
yf.download(tickers = nasdaq_tickers, period = 'max', interval = '1d', group_by = 'ticker', threads=False)
yf.download(tickers = nasdaq_tickers, period = 'max', interval = '1d', group_by = 'ticker', threads=10)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@mayton2019
Bigdata Engineer
Можно слегка изменить код и скачать сначала четные а потом нечетные тикеры. Может проблема с потоками M1 проскочит мимо. Ну не проскочит - тогда поделить на 4 части. Тикер по модулю 4. Я всегда так делал. Если какая-то инфо-система подавилась данными. Делаем партишенинг.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы