Commit 1c3352b9 authored by Kseniya Lysenko's avatar Kseniya Lysenko
Browse files

Добавила информацию по потокам

parent 603c525d
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
Потоки. Передача файлов. Клиент-серверный чат
==============================================

Потоки
-------

Потоки (thread) в Python позволяет одновременно запускать разные подпрограммы, таким образом становится возможно одновременно выполнять несколько подпрограмм.
**thread** - это отдельный поток выполнения.

На самом деле подпрограммы даже при использовании потоков не выполняются одновременно:

 1. Работа с потоками - это не работа с разными ядрами процесса, мы фактически работаем внутри того же процесса, что и без потоков, только дробим его на подзадачи, так что о более эффективном распределении ресурсов речи не идёт.
 2. В Python для обеспечения стабильности и снижения конфликтов работает специальный шлюз - Global Interpreter Lock (GIL). Он и контролирует потоки.
GIL переключает потоки по умолчанию раз в 5 миллисекунд, так что потоки работают не одновременно, а последовательно, постоянно сменяя друга.

Самая близкая идея работе потоков в Питоне - сеанс одновременной игры в шахматы, когда один шахматист играет с несколькими. Сеанс хоть и называется "одновременным", но фактически шахматист обходит всех по очереди и делает свой ход в каждой партии.

Для работы с потоками используются модули _thread и threading (более новый).

Рассмотрим простой код для работы с потоками.::

 import threading
 import time

 def thread_function(number):
     print(f"Thread {number}: starting\n")
     time.sleep(2)
     print(f"Thread {number}: finishing\n")

 threads = list()

 for index in range(3):
     print(f"Create and start thread {index}\n")
     x = threading.Thread(target=thread_function, args=(index,))
     threads.append(x)
     x.start()

 for i,thread in enumerate (threads):
     print (f'Join thread {i} \n')
     thread.join()


Передача файлов
----------------
Передачу файлов с помощью сокетов можно реализовать по следующей схеме: