Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Асинхронность или многопоточность / 5 сообщений из 5, страница 1 из 1
07.10.2021, 21:52
    #40102902
Caxa_ASS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронность или многопоточность
Всем привет.

Прошу помочь мне модернизировать код, чтобы ускорит его работу или в способ асинхронности или многопоточности. Для этого необходимо использовать библиотеки, но у меня к сожалению не получилось:
from concurrent.futures import ThreadPoolExecutor, wait
import concurrent.futures

или
import asyncio
import aiohttp


Код: 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.
from bs4 import BeautifulSoup
import requests
from itertools import chain

import concurrent.futures
from concurrent.futures import ThreadPoolExecutor, wait, as_completed

import asyncio
import aiohttp

URLs = ['https://www.ceneo.pl/96177950', 'https://www.ceneo.pl/96939709', 'https://www.ceneo.pl/96659922', 'https://www.ceneo.pl/35420536', 'https://www.ceneo.pl/111427801']
HEADERS = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 OPR/68.0.3618.125', 'accept': '*/*'}

def get_html(url, params=None):
    r = requests.get(url, headers=HEADERS, params=params)
    return r

def get_data(html):
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.find_all('article', class_='product-top')
    data = []
    for item in items:
        data.append({'name': item.find('div', class_='product-top__title').get_text(strip=True)})
    return data

def parse():
    links = []
    for i in URLs:
        html = get_html(i)
        print(get_data(html.text))
        links.append(get_data(html.text))
    x = list(chain.from_iterable(links))
parse()


Буду благодарен за помощь
...
Рейтинг: 0 / 0
08.10.2021, 09:09
    #40102947
iot
iot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронность или многопоточность
Caxa_ASS,

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
def parse_url(url):
	html = get_html(url)
	data = get_data(html.text)
	print(data)
	return data

def parse():
	links = []
	with concurrent.futures.ProcessPoolExecutor() as executor:
		for i in executor.map(parse, URLs):
			links.append(i)
	x = list(chain.from_iterable(links))
...
Рейтинг: 0 / 0
08.10.2021, 12:29
    #40103014
Caxa_ASS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронность или многопоточность
iot, благодарю за ответ.
Протестировав вашу модернизацию, внес некоторые изменения, т.к. мне нужна была именно - многопоточность(ThreadPoolExecutor), в вашем примере многопроцессорность (ProcessPoolExecutor). Так же изменил
Код: python
1.
for i in executor.map(parse, URLs) 

на
Код: python
1.
for i in executor.map(parse_url, URLs)

и все работает.

Остался только один вопрос, как возвращать переменную х из функции parse(), т.к. добавление return х (необходимо для помещения в датафрейм) - ругается (TabError: inconsistent use of tabs and spaces in indentation)
[img=]
...
Рейтинг: 0 / 0
08.10.2021, 20:15
    #40103173
iot
iot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронность или многопоточность
Caxa_ASS
iot, благодарю за ответ.
Протестировав вашу модернизацию, внес некоторые изменения, т.к. мне нужна была именно - многопоточность(ThreadPoolExecutor), в вашем примере многопроцессорность (ProcessPoolExecutor). Так же изменил
Код: python
1.
for i in executor.map(parse, URLs) 

на
Код: python
1.
for i in executor.map(parse_url, URLs)

и все работает.

Остался только один вопрос, как возвращать переменную х из функции parse(), т.к. добавление return х (необходимо для помещения в датафрейм) - ругается (TabError: inconsistent use of tabs and spaces in indentation)
[img=]

сорян за неточности, и поменяйте мои отступы, табы на пробелы, тогда всё будет ok
...
Рейтинг: 0 / 0
10.10.2021, 10:02
    #40103391
Caxa_ASS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронность или многопоточность
iot,

Спасибо, все работает!)
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Асинхронность или многопоточность / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]