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

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

20.03.2021, 10:46. Показов 2801. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
SDL3_mixer - это библиотека я для воспроизведения аудио. Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru