каталог
нить
Что нить
- Является ли блок в пределах основной единицы потока исполнения временных ресурсов, выделяемых на процессорную систему, или процесс, выполняемый независимыми
особенность
- Наименьшая единица выполнения программы
Зачем нам нужна нить
- В то же время этот процесс может сделать только одну вещь, если вы хотите, чтобы сделать много вещей, это будет трудно
- Встречающиеся в процессе осуществления заблокирован, то весь процесс будет висеть
Как открыть нить
#方式一
from threading import Thread
import time
###线程开启的第一种方式
def mythred():
print('线程开启')
time.sleep(5)
print('线程结束')
#线程中可加可不加
if __name__ == '__main__':
t = Thread(target = mythred)
t.start()
#####方式二
from threading import Thread
import time
#通过类继承额方法
class Mythred(Thread):
def run(self):
print('线程开启')
time.sleep(5)
print('线程结束')
t = Mythred()
t.start()
Скорость создания темы против скорости процесса создания
from threading import Thread
from multiprocessing import Process
import time
def task(name):
print(f'{name} is running')
time.sleep(2)
print(f'{name} is end')
if __name__ == '__main__':
t = Thread(target=task,args=('子线程',))
p = Process(target=task,args=('子进程',))
# t.start()
p.start()
print('主')
'''
开启子线程的打印效果:
子线程 is running
主
子线程 is end
开启子进程打印效果:
主
子进程 is running
子进程 is end
进程和线程的创建速度
开启子进程需要申请资源开辟空间 慢
开启子线程只是告诉操作系统一个执行方案 快
'''
присоединиться метод нить
Регистрация и тот же метод присоединиться метод использования потоков и процессов
from threading import Thread
import time
def task():
print('子线程 start')
time.sleep(2)
print('子线程 end')
t = Thread(target=task)
t.start()
t.join() # 等待子线程运行结束
print('主线程')
Daemon нить
# 守护线程 守护的是进程的运行周期
from threading import Thread,enumerate,currentThread
import time
def task():
print('守护线程开始')
print(currentThread())
time.sleep(20)
# print('守护线程结束')
def task2():
print('子线程 start')
time.sleep(5)
print(enumerate())
print('子线程 end')
if __name__ == '__main__':
t1 = Thread(target=task)
t2 = Thread(target=task2)
t1.daemon = True
t2.start()
t1.start()
print('主')
Замок Защитная нить
from threading import Thread,Lock
x = 0
def task():
global x
for i in range(100000):
x += 1
t1 = Thread(target=task)
t2 = Thread(target=task)
t3 = Thread(target=task)
t1.start()
t2.start()
t3.start()
print(x)
228891
Мы обнаружили, что приведенный выше код, то это должно произойти отклонение величины х 300,000.
Решения
from threading import Thread,Lock
x = 0
lock = Lock()
def task():
global x
lock.acquire()
for i in range(200000):
x += 1
lock.release()
t1 = Thread(target=task)
t2 = Thread(target=task)
t3 = Thread(target=task)
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
print(x)
Вопросы Thread тупиковые
Так называемый тупиковый
- Явление относится к двум или более процессов или потоков в процессе реализации, в результате конкуренции за ресурсы, вызванные ждет друг с другом, при отсутствии внешней силы, они не будут иметь возможность продвигать его. В это время, говорят, что система находится в состоянии тупикового или системах для создания тупиковой ситуации, которая всегда находится в процессе ожидания другого процесса, который называется тупиковым