В свободное время я работаю над шабером изображений Reddit и одновременно пытаюсь получить изображения из разных подредакторов. Я узнал о параллельной библиотеке фьючерсов и понял, что это можно сделать. Моя проблема в том, что исполнитель ждет, пока одна задача не завершится sh, прежде чем приступить к следующей.
Для начала я установил максимальное количество потоков на 5, как по умолчанию. Я вызываю функцию в другом классе. Код, о котором идет речь:
images = []
for i in range(0, len(pc.subreddits)):
images.append(RedditImageScraper(reddit, base_folder_path, pc.subreddits[i]))
max_threads = 5
with ThreadPoolExecutor(max_workers=max_threads) as executor:
future = executor.submit(RedditImageScraper.scrape_images_static, images)
print(future.result())
Я превратил свой очищающий код в функцию stati c, которая вызывает функцию non-stati c в том же классе для выполнения действия по загрузке изображения.
@staticmethod
def scrape_images_static(list_of_images):
for i in range(0, len(list_of_images)):
list_of_images[i].scrape_images()
В этом коде reddit
- это объект, содержащий всю информацию, необходимую для доступа к API Reddits. pc.subreddits[i]
- это список субредитов, из которых нужно вычистить. Хотя первоначальная проблема возникла из-за того, что мой reddit
объект был одноэлементным. Однако, когда объект не одиночный, я получаю такой же ответ.
Поскольку ничто не является сигналом, новый объект создается в каждом l oop, я не могу понять, почему две задачи выполняются в последовательном порядке, а не одновременно, и я считаю, что они должны.
Я бегу python 3 на Raspberry Pi 4