1. Bloqueio global O GIL
possui um e apenas um encadeamento em execução em um determinado momento - > o encadeamento é mais seguro 2. A complexidade do encadeamento é
maior, geralmente não é recomendado o uso
3. Usado no pool de encadeamentos do banco de dados, no pool de conexão do banco de dados,
4 . não use um monte de tópicos, modificar um pouco mais difícil
mlock = threading.Lock ()
5 . mutex
bloqueio Adquirir
mlock.acquire ()
para liberar o desbloqueio
mlock.release ()
depois de desbloqueio, o lançamento não ocorrerá impasse
tais como: abrir um ficheiro não quer que os outros para modificar
6. o mlock = threading.RLock ()
quando o bloqueio, o bloqueio de reutilização prevenção de impasse, uma pluralidade de bloquear e libertar a fechadura pode ser usado da mesma função de
programa:
# teste , Thread thread
import import threading
num = 0
def t ():
globalNUM
NUM . + = 1
impressão (NUM)
para I no Intervalo (0,6 ):
D = do threading.Thread (alvo = T)
d.start ()
# podem ser sequencialmente saída
importação de Threading
importação Tempo
DEF func_A ():
impressão ( " a function start " )
time.sleep ( 2 )
print ( " a function end " )
def func_b ():
print ( " b function start " )
o time.sleep ( 2 )
Impressão ( " função termina b " )
B Tempo = time.time ()
func_A ()
func_B ()
Imprimir (time.time () - B Time)
# Ver o número de segundos para executar
Import Enfiar
_a = threading.Thread ( = alvo func_A)
_B = threading.Thread (target = func_B)
_a.start ()
_b.start ()
# começar
_a.join ()
_b.join ()
# espera
de impressão (time.time () - B Time)
# Ver Horário
# bloquear e liberar
Import encadeamento de
mlock = threading.Lock ()
# criar um bloqueio, nome mlock
# mlock = threading.RLock ()
# quando há um impasse, prevenção impasse reutilizável bloqueio
NUM = 0
DEF A ():
, Ltd. Livre Aderir NUM
mlock.acquire ( )
# bloqueio
NUM = + 1.
mlock.release ()
# bloqueio libertação
impressão (NUM)
para I em Gama (10 ):
D = do threading.Thread (alvo = a)
d.start ()
2020-04-12