Форум программистов, компьютерный форум, киберфорум
Python: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 14.03.2021
Сообщений: 1

Проблемы с исполнением кода при использовании мультипроцессинга (multiprocessing - Pool)

20.03.2021, 10:46. Показов 2814. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Пишу парсер, который парсит посты и сохраняет комментарии указанного пользователя в лист
Из-за большого количества постов решил использовать мультипроцессинг, но при его использовании комментарии перестают сохранятся в лист, хотя изменений в самом коде не было.

Может быть кто-нибудь сможет подсказать в чем моя ошибка?

1. Код без мультипроцессинга:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import requests
import fake_useragent
import lxml
import json
 
from bs4 import BeautifulSoup as bs
 
users_nicks_list = []
links_comments_list = []
ratings_text = []
ratings_summ = []
 
def get_soup(story_id):
    URL = 'https://pikabu.ru/ajax/comments_actions.php'
 
    user = fake_useragent.UserAgent().random
    story_id = story_id
 
    headers = {
        'User-Agent': user,
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'Origin': 'https://pikabu.ru'
    }
 
    data = {
        'action': 'get_story_comments',
        'story_id': story_id
    }
 
    responce = requests.post(URL, headers=headers, data=data)
    json_string = json.loads(responce.text)
 
    pre_soup = json_string['data']['comments']
    return pre_soup
 
def get_users(story_id, user_need):
    pre_soup = get_soup(story_id)
    for i in pre_soup:
        json_string_2 = i['html']
        soup = bs(json_string_2, features='lxml')
 
        users_nicks = soup.find_all('span', 'user__nick')
        links_comments = soup.find_all('a', 'comment__tool hint')
        ratings = soup.find_all('div', 'comment__rating-count hint')
 
        for i in range(len(users_nicks)):
            if users_nicks[i].text == user_need:
 
                users_nicks_list.append(users_nicks[i].text)
                links_comments_list.append(links_comments[i]['href'])
                ratings_text.append(ratings[i]['aria-label'])
                ratings_summ.append(ratings[i].text)
 
 
start = 6757200
end = 6757150
 
for i in range(start, end, -1):
    get_users(i, 'silybum')
    print(i)
 
print(users_nicks_list)
print(links_comments_list)
2. Код с мультипроцессингом
Я добавил метки <--, чтобы понимать что срабатывает условие "if users_nicks[i].text == user_need:"
Т.е в этом посте найден нужный пользователь

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import requests
import fake_useragent
import lxml
import json
 
 
from multiprocessing import Pool
from bs4 import BeautifulSoup as bs
 
users_nicks_list = []
links_comments_list = []
ratings_text = []
ratings_summ = []
 
 
def get_soup(story_id):
    URL = 'https://pikabu.ru/ajax/comments_actions.php'
 
    user = fake_useragent.UserAgent().random
    story_id = story_id
 
    headers = {
        'User-Agent': user,
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'Origin': 'https://pikabu.ru'
    }
 
    data = {
        'action': 'get_story_comments',
        'story_id': story_id
    }
 
    responce = requests.post(URL, headers=headers, data=data)
    json_responce = json.loads(responce.text)
 
    pre_soup = json_responce['data']['comments']
    return pre_soup
 
 
def get_users(story_id):
    user_need = 'silybum'
    pre_soup = get_soup(story_id)
    for i in pre_soup:
        json_string_2 = i['html']
        soup = bs(json_string_2, features='lxml')
 
        users_nicks = soup.find_all('span', 'user__nick')
        links_comments = soup.find_all('a', 'comment__tool hint')
        ratings = soup.find_all('div', 'comment__rating-count hint')
 
        for i in range(len(users_nicks)):
            if users_nicks[i].text == user_need:
                users_nicks_list.append(users_nicks[i].text)
                links_comments_list.append(links_comments[i]['href'])
                ratings_text.append(ratings[i]['aria-label'])
                ratings_summ.append(ratings[i].text)
                print(story_id,'<--')
    print(story_id)
 
 
def main():
 
    start = 6757200
    end =   6757150
 
    mas = []
 
    for i in range(start, end, -1):
        mas.append(i)
 
    with Pool(16) as p:
        p.map(get_users, mas)
    print(users_nicks_list)
    print(links_comments_list)
 
 
main()
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.03.2021, 10:46
Ответы с готовыми решениями:

Медленный multiprocessing Pool
Да, я читал, что с параллельностью в питоне всё совсем хреново. Но тогда не понятно, зачем вообще нужен модуль multiprocessing, если в нем...

Multiprocessing: Value и Pool.map()
Есть код: from ctypes import c_int from multiprocessing import Process, Pool, Value, Lock def func(data): data.value...

Производительность multiprocessing.Pool
Сейчас в машинном обучении идёт соревнование за приз в 100 тысяч долларов по распознаванию рыб. Вот оттуда кусочек кода (я его немного...

1
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
21.03.2021, 12:00
Лучший ответ Сообщение было отмечено Welemir1 как решение

Решение

silybum, с IO-bouned задачами (запросы -- одна из них), надо работать через thread Pool executor

Добавлено через 3 минуты
А проблема ваша в том, что процессы не используют разделяемую память и у каждого из них свой лист

https://stackoverflow.com/a/40682175/12444061
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.03.2021, 12:00
Помогаю со студенческими работами здесь

Multiprocessing.Pool список идентификаторов дочерних процессов
День добрый. Приведенный ниже код создает пул процессов, которые будут параллельно отрабатывать функцию WebPageParser() with...

Воспроизведение функции н-ое количество раз (multiprocessing.Pool)
Добрый день! Задача: воспроизвести функцию определённое количество раз. Я использую библиотеку multiprocessing.Pool, но в консоли...

События таймера при занятом исполнением кода приложении
Добрый день. Возможно, создал вопрос не в том разделе, поскольку он касается чисто WinAPI, но соответствующего раздела не нашёл. ...

Multiprocessing.Pool - общая для всех дочерних процессов переменная (список)
День добрый! Имеется пул процессов, который отлично работает, но хотелось бы сделать так, чтобы все эти процессы могли смотреть в одну и...

Проблемы при использовании FOR F/
Добрый день. Есть давно написанная программа, которую сейчас потребовалось несколько изменить. Возникли проблемы с функцией for, может...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru