Я создал простую программу python, которая сбрасывает мой любимый сайт рецептов и возвращает отдельные URL рецептов с основного сайта. Хотя это относительно быстрый и простой процесс, я попытался масштабировать его, чтобы очистить несколько веб-страниц внутри сайта. Когда я это делаю, требуется около 45 секунд, чтобы очистить все URL-адреса рецептов со всего сайта. Я бы хотел, чтобы этот процесс был намного быстрее, поэтому я попытался реализовать потоки в моей программе.простая многопоточность в python 3
Я понимаю, что здесь что-то не так, потому что каждый поток возвращает всю цепочку URL-адресов снова и снова, а не «разделяет» работу. Есть ли у кого-нибудь предложения о том, как лучше реализовать потоки? Я включил свою работу ниже. Использование Python 3.
from bs4 import BeautifulSoup
import urllib.request
from urllib.request import urlopen
from datetime import datetime
import threading
from datetime import datetime
startTime = datetime.now()
quote_page='http://thepioneerwoman.com/cooking_cat/all-pw-recipes/'
page = urllib.request.urlopen(quote_page)
soup = BeautifulSoup(page, 'html.parser')
all_recipe_links = []
#get all recipe links on current page
def get_recipe_links():
for link in soup.find_all('a', attrs={'post-card-permalink'}):
if link.has_attr('href'):
if 'cooking/' in link.attrs['href']:
all_recipe_links.append(link.attrs['href'])
print(datetime.now() - startTime)
return all_recipe_links
def worker():
"""thread worker function"""
print(get_recipe_links())
return
threads = []
for i in range(5):
t = threading.Thread(target=worker)
threads.append(t)
t.start()
Ваши рабочие потоки просто пытаются очистить 'quote_page' снова и снова. Что вы подразумеваете под разделением работы? – dvnguyen