1. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

[Python] Python threading. How do I lock a thread?

Discussão em 'Python' iniciado por Stack, Outubro 8, 2024.

  1. Stack

    Stack Membro Participativo

    I'm trying to understand the basics of threading and concurrency. I want a simple case where two threads repeatedly try to access one shared resource.

    The code:

    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 increment():
    global count
    lock.acquire()
    try:
    count += 1
    finally:
    lock.release()

    def bye():
    while True:
    increment()

    def hello_there():
    while True:
    increment()

    def main():
    hello = Thread(hello_there)
    goodbye = Thread(bye)

    while True:
    print count

    if __name__ == '__main__':
    main()


    So, I have two threads, both trying to increment the counter. I thought that if thread 'A' called increment(), the lock would be established, preventing 'B' from accessing until 'A' has released.

    Running the makes it clear that this is not the case. You get all of the random data race-ish increments.

    How exactly is the lock object used?

    Additionally, I've tried putting the locks inside of the thread functions, but still no luck.

    Continue reading...

Compartilhe esta Página