Это то, что у меня есть для многопроцессорности, работает очень хорошо, ускоряется. Тем не менее, он не будет зацикливаться на второй странице. дает мне «ValueError: Пул не работает.»
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
}
response = requests.get(forum_page_url, headers=headers).content
soup = bs4.BeautifulSoup(response, 'lxml')
recommended = soup.select('tbody:has(.threadpages [src="images/new.gif"]), '
'tbody:has(.threadpages [src="images/new1.gif"]), '
for item in recommended:
for i in item.select('.folder [href^="thread-"]'):
url_tail = i['href']
url_domain = 'http://www.pop999.com/forum/'
url = urljoin(url_domain, url_tail)
# 多线程 Multiprocessing
# q = multiprocessing.Queue()
p.apply_async(download_imgs, args=(url, ))
p.apply_async(retrieve_bt_link, args=(url, ))
p.close()
p.join()
мои закрытие и соединение выстроены в линию с первым циклом for, он просто не будет обрабатываться на второй странице, возвращая «ValueError: Пул не запущен». У кого-нибудь есть идеи, почему и как?
проблема исправлена, когда я комбинировал с предыдущей функцией цикла (сокращенная версия):
forum pages ranging loops:
posts for loops:
p.apply_async
p.apply_async
p.close()
p.join()
С моей точки зрения, если у вас есть более двух циклов в иерархическом порядке (мой цикл форума >> пост-цикл >> файловый цикл} (не параллельно), и вы хотите зациклить их с помощью многопроцессорной обработки. Я настоятельно рекомендую вам объединить их в одну функцию, чтобы избежать "пула не запущенного" ValueError.
Вы можете выполнять многопроцессорную обработку для каждой функции, я пока не уверен, работает ли она. Я также встречался с «демоническим процессом, не позволяющим дочерний процесс» несколько раз ранее. Итак, посмотрите, как это будет работать, чтобы соответствовать вашей ситуации.
PS мои навыки в (CS) python очень ограничены, поэтому мои предложения не для всех. Это очень простой материал.