Python фьючерсы и списки загрузки в threadpoolexecutor - PullRequest
0 голосов
/ 09 февраля 2019

У меня проблемы с концептуализацией этой проблемы ... Если работа не удалась, я не могу просто добавить ее обратно во фьючерс.Поэтому я ищу более простой многопоточный процесс в Python.

Сводка:

Моя реализация параллельных фьючерсов требует, чтобы вы загружали список в указанное число потоков и передавали его исполнителю для отправки.Эта программа загружает множество URL-адресов из Redis и записывает DOM в файл.

Весь набор Redis читается как список в return_contents().

URLs = return_contents()
# print(URLs)
print('complete')

start = time.time()

# passing the urls to the threadpoolexecutor
with ThreadPoolExecutor(max_workers=20) as executor:
    future_to_url = {executor.submit(load_url, url): url for url in URLs}
    print('jobs are loaded')
    for future in concurrent.futures.as_completed(future_to_url):
        url = future_to_url[future]
        completed = return_to_orig_names(url)
        name_check = check_ismemeber_crawled(completed)
        if name_check == 1:
            print('############################## we are skipping {0} because it is in crawled urls'.format(completed))
            pass
        else:
            try:
                data = future.result()
                html_data = str(data)
                add_url_es(url, html_data, es)
                add_completed_to_redis(completed)
            except Exception as exc:
                # if there is a max retry error then we need to add them to a different set in redis or to a file.
                # we need to add this to a different set in redis
                print('%r generated an exception: %s' % (url, exc))
                print('we are going to add this back into the queue')
        del future_to_url[future]

end = time.time()
print(end - start)

Я ищу что-то, что больше похоже на это ...

Псевдокод:

Если задан повторный URL-адрес: назначить работу для потока1, назначить работу для потока2, назначить работу для потока3 ... назначить работу для потока20.если задания возвращают действительные результаты: удалить из redis, еще: добавить обратно в redis

Что-то подобное должно существовать ...

...