вопросы Python пронизывающие

нить

Что нить

  • Является ли блок в пределах основной единицы потока исполнения временных ресурсов, выделяемых на процессорную систему, или процесс, выполняемый независимыми

особенность

  • Наименьшая единица выполнения программы

Зачем нам нужна нить

  1. В то же время этот процесс может сделать только одну вещь, если вы хотите, чтобы сделать много вещей, это будет трудно
  2. Встречающиеся в процессе осуществления заблокирован, то весь процесс будет висеть

Как открыть нить

#方式一
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 тупиковые

Так называемый тупиковый

  • Явление относится к двум или более процессов или потоков в процессе реализации, в результате конкуренции за ресурсы, вызванные ждет друг с другом, при отсутствии внешней силы, они не будут иметь возможность продвигать его. В это время, говорят, что система находится в состоянии тупикового или системах для создания тупиковой ситуации, которая всегда находится в процессе ожидания другого процесса, который называется тупиковым

рекомендация

отwww.cnblogs.com/ledgua/p/11543917.html
рекомендация