Estoy tratando de entender los conceptos básicos de subprocesamiento y concurrencia. Quiero un caso simple en el que dos hilos intenten acceder repetidamente a un recurso compartido.Enhebrado de Python. ¿Cómo bloqueo un hilo?
El código:
import threading
class Thread(threading.Thread):
def __init__(self, t, *args):
threading.Thread.__init__(self, target=t, args=args)
self.start()
count = 0
lock = threading.Lock()
def incre():
global count
lock.acquire()
try:
count += 1
finally:
lock.release()
def bye():
while True:
incre()
def hello_there():
while True:
incre()
def main():
hello = Thread(hello_there)
goodbye = Thread(bye)
while True:
print count
if __name__ == '__main__':
main()
lo tanto, tengo dos hilos, ambos tratando de incrementar el contador. Pensé que si el hilo 'A' se llamaba incre()
, se establecería el lock
, impidiendo que 'B' accediera hasta que se haya liberado 'A'.
Al ejecutar, deja en claro que este no es el caso. Obtienes todos los incrementos aleatorios de datos aleatorios.
¿Cómo se usa exactamente el objeto de bloqueo?
Editar, Además, he intentado poner los bloqueos dentro de las funciones de subprocesos, pero todavía no tuve suerte.
Su código no se ejecuta. –
@Ignacio Vazquez-Abrams - Debería ahora. Dejé fuera el bit 'if __name__'. ¿Es eso lo que usted se refería? – Zack
Tampoco funciona para mí. Esperaría que tu creación de hilo se viera como 'hello = threading.Thread (target = hello_there)' y luego para que el hilo se inicie 'hello.start()'. –