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

«Распараллелить» выполнение функции

11.07.2016, 13:09. Показов 3228. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть функция, как сделать, чтобы она выполнялась параллельно?

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
import requests
from weblib.text import normalize_space
from lxml import html
# from multiprocessing.dummy import Pool
 
links = [
    'https://www.python.org/downloads/release/python-343/',
    'http://pythonworld.ru/samouchitel-python',
    'http://pythonworld.ru/', 'http://python.su/',
    'https://www.codecademy.com/learn/python',
    'https://ru.coursera.org/specializations/python',
    'https://www.codeschool.com/learn/python'
]
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0'}
 
# pool = Pool(2)
 
 
def foo():
    snippets = set()
    for link in links:
        try:
            req_link = requests.get(link, headers=headers, timeout=5)
            if req_link.status_code == 200:
                resp_link = html.fromstring(req_link.content)
                snippets_with_htmls = resp_link.xpath("//meta[@name='description']/@content")
                for i in snippets_with_htmls:
                    snippets.add(i.strip('.’… \n\xa0'))
        except Exception as e:
            print(e)
            continue
    res = []
    piece = ''
    for line in snippets:
        piece += (line + '. ')
        if len(piece) >= 100:
            res.append(piece.lstrip('. ').rstrip(' '))
            piece = ''
 
    text = '<p>' + '</p>\n<p>'.join(res) + '</p>'
    return normalize_space(text)
 
if __name__ == '__main__':
    # with pool as p:
    #     result = p.map(foo, links)
    #     print(result)
    print(foo())
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.07.2016, 13:09
Ответы с готовыми решениями:

Распараллелить выполнение
Нужна помощь в распареллиливании синхронного когда. Суть задачи: 1. Читаем построчно файл в котором каждая строка - url; 2. Посылаем...

Как распараллелить выполнение процессов в консоли
Есть такая вот консоль: using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Распараллелить выполнение цикла на все ядра процессора
Есть цикл for с очень большим количеством итераций, его выполнение отнимает кучу времени, хочу его ускорить с помощью потоков - создать...

9
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
11.07.2016, 14:52
Потоки, процессы, асинхронка, вариантов куча.
0
1 / 1 / 0
Регистрация: 03.02.2015
Сообщений: 35
11.07.2016, 15:01  [ТС]
Так я же написал, процессы (multiprocessing.dummy import Pool) и закомментированные строчки добавил. Только не могу разобраться, как это все связать.
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
12.07.2016, 14:40
Лучший ответ Сообщение было отмечено Marinero как решение

Решение

stanton, если исчо актуально, ваш код должен работать, надо лишь чуть-чуть изменить
Python
1
2
3
4
5
6
7
8
9
10
11
...
from multiprocessing import Pool
...
 
def foo(link):
    ...
 
if __name__ == '__main__':
    with Pool(processes=2) as pool:
        result = pool.map(foo, links)
        print(result)
1
1 / 1 / 0
Регистрация: 03.02.2015
Сообщений: 35
12.07.2016, 16:22  [ТС]
shsv и правда работает. Только в ответе так получается:

['<p></p>', '<p></p>', '<p></p>', '<p></p>', '<p></p>', '<p>Take free online classes from 140+ top universities and educational organizations. We partner with schools like Stanford, Yale, Princeton, and others to offer courses in dozens of topics, from computer science to teaching and beyond. Whether you are pursuing a passion or looking to advance your career, Coursera provides open, free education for everyone.</p>', '<p></p>']
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
12.07.2016, 19:07
Цитата Сообщение от stanton Посмотреть сообщение
Только в ответе так получается:
Похоже - моя вина
Python
1
2
3
4
5
6
7
8
9
10
11
def foo(link):
...
    res = []
    piece = ''
    for line in snippets:
        piece += (line + '. ')
        if len(piece) >= 100:
            res.append(piece.lstrip('. ').rstrip(' '))
            piece = ''
    res.append(piece)
    text = '<p>' + '</p>\n<p>'.join(res) + '</p>'
К этому, нет особых причин оставлять это место в функции, коли на выходе map мы получаем список result, можно его и склеивать
Python
1
2
3
4
if __name__ == '__main__':
    with Pool(processes=2) as pool:
        result = pool.map(foo, links)
        print('<p>' + '</p>\n<p>'.join(result) + '</p>')
1
1 / 1 / 0
Регистрация: 03.02.2015
Сообщений: 35
12.07.2016, 19:19  [ТС]
shsv что-то не работает, но все-равно спасибо за помощь!
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
12.07.2016, 19:26
stanton, у меня вот такое получается
Python
1
['The official home of the Python Programming Language', 'Самоучитель языка программирования Python для изучения Python с нуля, собранный из материалов сайта [url]http://pythonworld.ru[/url]', 'Уроки программирования Python 3 для начинающих и чайников, справочник и документация Python 3', '', '', 'Take free online classes from 140+ top universities and educational organizations. We partner with schools like Stanford, Yale, Princeton, and others to offer courses in dozens of topics, from computer science to teaching and beyond. Whether you are pursuing a passion or looking to advance your career, Coursera provides open, free education for everyone', 'Explore what it means to store and manipulate data, make decisions with your program, and leverage the power of Python']
и бросает одно исключение:
hostname 'www.codecademy.com' doesn't match 'reports.awesomenesstv.com'

Да и тьфу-ты ну-ты, там же должно быть
Python
1
if piece: res.append(piece)
0
1 / 1 / 0
Регистрация: 03.02.2015
Сообщений: 35
12.07.2016, 19:33  [ТС]
Там пустые строки, поэтому и их оборачивает. Пробовал ставить if != None, не получилось. Ну и знаний не хватает.
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
12.07.2016, 19:41
Просто попробуйте закоментировать строки с 32 по 40, а в text запихните
Python
1
text = ''.join(snippets)
(В скобках: пустые строки не None; пустая строка, как и всякий пустой объект, в булевом контексте преобразуется в False)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.07.2016, 19:41
Помогаю со студенческими работами здесь

Как правильно распараллелить выполнение DoWork, чтобы не было взаимоисключающих ситуаций
Так вот, пишу клиент-серверную вещь, что-то вроде переборщика паролей. Количество потоков для перебора пользователь выбирает сам. Далее при...

Остановить выполнение функции и перезапустить ее выполнение по новой
Всем доброго вечера. Друзья, подскажите пожалуйста - есть код, который после загрузки ДОМ дерева проверяет его на наличие определенных...

Не удается правильно распараллелить программу табулирования функции, используя OpenMP
Необходимо было написать программу для табулирования функции. Расчеты выводит правильные, но время выполнения программы увеличивается с...

Остановить выполнение функции внутри другой функции
Здравствуйте. Такая проблема Реализовано следующее: при открытии страницы срабатывает функция и выдаётся поочерёдно элементы...

Выполнение функции
Здраствуйте, подскажите пожайлуйста. Вообщем пользуюсь функциями http://htmlweb.ru/php/example/curl_login.php функции работают...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru