Concurrent.futures выдает ошибку NoneType, но только после примерно 72 000 итераций - PullRequest
0 голосов
/ 02 июня 2019

Здесь мне очень помогли параллелизм, и он действительно заработал, или я подумал: Как исправить многопоточность / многопроцессорность с помощью словарей? ... втянулся в некоторые другие задачи и только сейчас имел возможность вернуться к этому. Он отлично работает на 50 000, 70 000 и 71 000 итераций, но затем по какой-то причине выдает ошибку NoneType, около 72 000 ??? Каждый раз, и информация, кажется, там есть ... она работала без параллелизма, это занимало часы.

    pool = ThreadPoolExecutor(max_workers = 25)
    results = list(tqdm(pool.map(get_ips_from_sysinfo, urls), total=len(urls)))

, а затем немного get_ips_from_sysinfo

def get_ips_from_sysinfo(urls):
    sysinfo = hx_request(urls)
    ip_dict =[]
    sysinfo = sysinfo["data"]
    hostname = sysinfo.get("hostname")
    print(hostname)
    network_array = sysinfo.get("networkArray", {})
    network_info = network_array.get("networkInfo", [])

Работает на 69 000 70 000 71 000 Я не понимаю, почему это работает примерно до 72000 ???

Traceback (most recent call last):
  File "RiskReportV2_concurrent.py", line 282, in <module>
    concurrency(appliance)
  File "RiskReportV2_concurrent.py", line 267, in concurrency
    results = list(tqdm(pool.map(get_ips_from_sysinfo, urls), total=len(urls)))
  File "/mnt/c/Users/money/Documents/riskreport/src/tqdm/tqdm/_tqdm.py", line 1022, in __iter__
    for obj in iterable:
  File "/usr/lib/python3.5/concurrent/futures/_base.py", line 556, in result_iterator
    yield future.result()
  File "/usr/lib/python3.5/concurrent/futures/_base.py", line 398, in result
    return self.__get_result()
  File "/usr/lib/python3.5/concurrent/futures/_base.py", line 357, in __get_result
    raise self._exception
  File "/usr/lib/python3.5/concurrent/futures/thread.py", line 55, in run
    result = self.fn(*self.args, **self.kwargs)
  File "RiskReportV2_concurrent.py", line 135, in get_ips_from_sysinfo
    sysinfo = sysinfo["data"]
TypeError: 'NoneType' object is not subscriptable

Наконец-то появилась возможность еще раз взглянуть на это, и я понятия не имею, правильно я это сделал или нет, но переключение функции на это работает

def get_ips_from_sysinfo(urls):
    sysinfo = hx_request(urls)
    ip_dict =[]
    if not sysinfo:
        print("None")
    else:
        sysinfo = sysinfo["data"]

... надеюсь, это кому-нибудь поможет!

1 Ответ

0 голосов
/ 10 июня 2019

См. Ответ там внизу

Наконец-то появилась возможность еще раз взглянуть на это, и я понятия не имею, правильно ли я это сделал или нет, но переключение функции на это работает

...