Skip to main content

A wonderful life without deadlocks

Project description

locklib

Deadlocks are the most terribly enemies of all programmers who are making multithreaded programs. If you are a one of them - maybe this library is helpful for you.

How can i use it?

Get the locklib from the pip:

$ pip install locklib

And use a lock from this library as a usual Lock from the standart library:

from threading import Thread
from locklib import LifeLock


lock = LifeLock()
counter = 0

def function():
  global counter

  for _ in range(1000):
      with lock:
          counter += 1

thread_1 = Thread(target=function)
thread_2 = Thread(target=function)
thread_1.start()
thread_2.start()

assert counter == 2000

In this case the lock helps to us to not get a race condition, as the standart Lock. But! Let's provoke a deadlock and look what happens:

from threading import Thread
from locklib import LifeLock


lock_1 = LifeLock()
lock_2 = LifeLock()

def function_1():
  while True:
    with lock_1:
      with lock_2:
        pass

def function_2():
  while True:
    with lock_2:
      with lock_1:
        pass

thread_1 = Thread(target=function_1)
thread_2 = Thread(target=function_2)
thread_1.start()
thread_2.start()

And... We have an exception like this:

...
locklib.errors.DeadLockError: A cycle between 1970256th and 1970257th threads has been detected. The full path of the cycle: 1970257, 1970256.

Deadlocks are impossible for this lock!

If you want to catch the exception, import it from the locklib too:

from locklib import DeadLockError

How it works?

Detecting of deadlocks based on Wait-for Graph.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

locklib-0.0.3.tar.gz (5.4 kB view hashes)

Uploaded Source

Built Distribution

locklib-0.0.3-py3-none-any.whl (7.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page