Потоки (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()
Передача файлов
----------------
Передачу файлов с помощью сокетов можно реализовать по следующей схеме: