Pool.Apply_Async не будет зациклен, ValueError: Пул не запущен - PullRequest
0 голосов
/ 20 мая 2019

Это то, что у меня есть для многопроцессорности, работает очень хорошо, ускоряется. Тем не менее, он не будет зацикливаться на второй странице. дает мне «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 очень ограничены, поэтому мои предложения не для всех. Это очень простой материал.

1 Ответ

0 голосов
/ 21 мая 2019

проблема решена с незначительным исправлением:

мои коды состоят из трех основных частей: 1. Выбор нескольких страниц форума, 2. Коллекция сообщений, 3. Фотография содержимого и загрузка семян.

«ValueError: Пул не запущен» происходит, если я пишу по 2 функции для форума и публикую каждую, у каждой из них есть цикл, цикл ранжирования для нескольких страниц и цикл для сообщений.проблема решена, когда я объединил их в одну функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...