Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions CPU-bound sync.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from concurrent.futures import ProcessPoolExecutor
from hashlib import md5
from random import choice


def check_coin():
while True:
s = "".join([choice("0123456789") for i in range(50)])
h = md5(s.encode('utf8')).hexdigest()

if h.endswith("00000"):
return s, h


def find_coin(workers_count):
with ProcessPoolExecutor(max_workers=workers_count) as executor:
for i in range(6):
executor.submit(check_coin)


if __name__ == '__main__':
find_coin(100)
23 changes: 23 additions & 0 deletions io-bound_requests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import urllib
from urllib.request import Request
import concurrent.futures


def load_url(url, timeout):
with urllib.request.urlopen(url, timeout=timeout) as conn:
return conn.code


links = open('res.txt', encoding='utf8').read().split('\n')


with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor:
future_to_url = {executor.submit(load_url, url, 5): url for url in links}
for future in concurrent.futures.as_completed(future_to_url):
url = future_to_url[future]
try:
code = future.result()
except Exception as exception:
print('%r generated an exception: %s' % (url, exception))
else:
print(f'{code:d} code')
17 changes: 17 additions & 0 deletions io-bound_write_links.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from urllib.request import urlopen
from bs4 import BeautifulSoup
from tqdm import tqdm

url = 'https://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%A1%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0'

res = open('res.txt', 'w', encoding='utf8')

for i in tqdm(range(100)):
html = urlopen(url).read().decode('utf8')
soup = BeautifulSoup(html, 'html.parser')
links = soup.find_all('a')

for l in links:
href = l.get('href')
if href and href.startswith('http') and 'wiki' not in href:
print(href, file=res)
48 changes: 48 additions & 0 deletions report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Переход по случайным ссылкам
**Во всех замерах используется 1069 ссылок.**
### 1. Синхронный проход (результат профилирования):

![multitask](https://user-images.githubusercontent.com/78908105/143779766-c611f376-e2a6-4e42-bfc2-ee9fa0083603.png)

### 2. Асинхронный проход по ссылкам:

| Количество вокреров | Время выполнения (мс) |
| ------------- | ------------- |
| 5 | 256854 |
| 10 | 125762 |
| 100 | 24575 |

Если посмотреть на таблицу, можно заметить линейную зависимость между количесвом воркеров и временем выполнения.
Это объясняется тем, что задача является IO-Bound.

# Генерация монет

### 3. Генерация монет на одном ядре

В компьютере уставновлено 4 ядра, 16 гб оперативной памяти.

При генерации **15 монет** затратилось **1 711 467 мс**.
Т.е. в среднеем на одну монету ушло **114 097.8 мс.**

Ресурсы компьютера при работе:

![cpubound](https://user-images.githubusercontent.com/78908105/143779782-cb09fc6b-845a-44c6-a1dd-262a441924f1.png)

### 4. Генерация монет с несколькими ядрами

Чтобы ускорить проведение опытов, я решил уменьшить количество монет с **15 до 4.**

| Кол-во процессов | Среднее время выполнения (мс) |
| ------------- | ------------- |
| 2 | 18113.5 |
| 4 | 4480.5 |
| 5 | 9325.5 |
| 100 | Error |

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

### На картинке результат работы при 2 и 4 ядрах:

![cpubound1](https://user-images.githubusercontent.com/78908105/143779789-6bdb4e88-b892-4cbc-a333-94723fa21385.png)
Loading