powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Асинхронность или многопоточность
5 сообщений из 5, страница 1 из 1
Асинхронность или многопоточность
    #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
Асинхронность или многопоточность
    #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
Асинхронность или многопоточность
    #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
Асинхронность или многопоточность
    #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
Асинхронность или многопоточность
    #40103391
Caxa_ASS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iot,

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


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