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
30 changes: 30 additions & 0 deletions Practice/Ozerova/10/10.2.py
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Почему для решения задачи выбраны именно потоки?
Что если нам потребуется складывать не пары аргументов, а сразу много?
Почему для потоков есть start, но отсутствует join?

Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import threading

def fun(x, y):
return x + y

def add3(arg_new):
for args in arg_new:
x, y = args
res = fun(x, y)
print(f'{x} + {y} = {res}')

def add_integer(a):
int_thr = threading.Thread(target=add3, args=(a,))
int_thr.start()

def add_string(b):
str_thr = threading.Thread(target=add3, args=(b,))
str_thr.start()

def add_list(c):
l_thr = threading.Thread(target=add3, args=(c,))
l_thr.start()

a = [(1, 2), (3,4)]
b = [('hello', 'bye'), ('Ivan', 'Maria')]
c = [([1, 2], [3, 4]), (['abc'], ['def'])]

add_integer(a)
add_string(b)
add_list(c)
22 changes: 22 additions & 0 deletions Practice/Ozerova/11/11.2.client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import socket
import pickle

class User:
def __init__(self, name, age):
self.name = name
self.age = age

def send_user_info(name, age):
user = User(name, age)
data = pickle.dumps(user)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 12345))

s.sendall(data)
s.close()

if __name__ == '__main__':
name = input('Введите имя пользователя: ')
age = int(input('Введите возраст пользователя: '))
send_user_info(name, age)
30 changes: 30 additions & 0 deletions Practice/Ozerova/11/11.2.server.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import socket
import pickle

class User:
def __init__(self, name, age):
self.name = name
self.age = age

def receive_user_info():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Этот сокет надо закрыть. Самый правильный способ это сделать - использовать менеджер контекста:

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    ...

s.bind(('localhost', 12345))
s.listen(5)

while True:
conn, addr = s.accept()

data = conn.recv(1024)

if not data:
break

user = pickle.loads(data)

print(f'Имя пользователя: {user.name}')
print(f'Возраст пользователя: {user.age}')

conn.close()

if __name__ == '__main__':
receive_user_info()
24 changes: 24 additions & 0 deletions Practice/Ozerova/13/13.1
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
2 примера: Интернет вещей и Аналитические системы
Интернет вещей: В предметной области имеется огромное количество устройств,
собирающих и передающих данные, NoSQL-подход является более предпочтительным.
Причины:
1. гибкость схемы данных, поскольку данные могут иметь различную структуру,
так как они могут собираться с разных типов устройств.
NoSQL, такие как MongoDB или Cassandra, позволяют хранить данные без строгих
требований к схеме, что позволяет легко и быстро добавлять новые типы данных или изменять существующие.
и 2. горизонтальное масштабирование: здесь важно, чтобы база данных могла масштабироваться горизонтально,
чтобы обрабатывать большой объем данных и обеспечивать высокую производительность.
NoSQL обычно предлагают схему распределенной архитектуры,
что обеспечивает горизонтальное масштабирование и масштабируемость.

Аналитические системы Big Data: данные имеют большой объем и требуется выполнение сложных
аналитических запросов, NoSQL-подход также является более подходящим.
Причины:
1. гибкость схемы данных - данные могут меняться и иметь различную структуру, поскольку они могут
быть собраны из различных источников данных. NoSQL базы данных позволяют гибко изменять
схему данных и легко добавлять новые типы данных или изменять существующие без ограничений схемы данных.
2. горизонтальное масштабирование: аналитические системы требуют обработки большого объема данных
для выполнения сложных запросов и анализа больших наборов данных.
NoSQL базы данных, такие как Apache HBase или Apache Cassandra, позволяют горизонтальное масштабирование
для обработки большого объема данных и предоставляют высокую производительность.

9 changes: 9 additions & 0 deletions Practice/Ozerova/9/9.1.py
Original file line number Diff line number Diff line change
@@ -1 +1,10 @@
import re


res = []
with open("readme.md", encoding="utf-8") as f:
reg = re.compile("git\s+\w.*")
for line in f:
str_res = re.findall(reg, line)
print(str_res)

33 changes: 33 additions & 0 deletions Practice/Ozerova/9/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
Рабочая папка для слушателей курса. Пожалуйста, создавайте свои подпапки, называя их по своей фамилии (на английском) и сохраняйте в них результаты выполнения заданий.

Для работы с репозиторием можно установить git и использовать следующий порядок действий:
1. Регистрируетесь на guithub.com и подписываетесь на данный репозиторий нажимая кнопку Watch справа вверху.
2. На рабочем компьютере выполняете команду "git clone https://github.com/IlyaOrlov/PythonCourse2.0_May23.git", чтоб скачать папку проекта.
3. Заходите в скачанную папку: cd PythonCourse2.0_May23
4. Указываете электронную почту и имя, которыми будут подписываться все ваши изменения:

        git config --global user.email "здесь укажите какой-нибудь email"
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;git config --global user.name "здесь укажите имя"

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Например:
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;git config --global user.email "orlov.soft.company@gmail.com"
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;git config --global user.name "Ilya Orlov"

5. По умолчанию вы будете находится на бранче main. Начиная работу над новым заданием, создайте свой бранч, с помощью следующей команды:
"git checkout -b my_branch", где my_branch - название вашего бранча (английскими буквами без пробелов), которое вы ему придумаете.

7. Публикуете эту ветку в удаленном репозитории: git push --set-upstream origin my_branch (на этом этапе может потребоваться токен для авторизации на Гитхабе; порядок его создания описан в документе Useful/ГенерацияТокенаДляГитхаба.pdf).

8. В папке Practice создаете подпапку (если еще не создали), называете ее по своей фамилии, и добавляете туда скрипт с выполненным заданием (например, mytest.py), либо делаете всяческие изменения в своих скриптах.

9. Вносите файл под контроль git с помощью команды "git add" (например, git add mytest.py)
11. Коммитите изменения (чтобы git присвоил им номер версии): git commit -m "Любой разумный комментарий к сделанным изменениям"
12. Подтягиваете последние изменения из общего репозитория: git pull origin main
13. Публикуете свои изменения на своем бранче в удаленном репозитории на сервере: git push
14. Зайдя на страницу репозитория в гитхабе (https://github.com/IlyaOrlov/PythonCourse2.0_May23), в списке branches выбираете свой бранч и нажимаете New pull request, чтоб запросить внесение изменений с вашего бранча в main бранч.

Пункты 1-2 выполняются однократно. Пункты 3-4, 10 - при работе над каждым новым заданием. Пункты 5-9 при каждом изменении, которое вы собираетесь публиковать.
Если вы предпочитаете командной строке работу с визуальным интерфейсом - можно скачать и установить приложение TortoiseGit (https://tortoisegit.org/download/) и выполнить пункты 3-9 в нем. Также TortoiseGit - удобная штука для разрешения конфликтов, которые могут возникнуть после шага 8.