Dark Mode

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

jupe/py-lockable

Repository files navigation

lockable

Resource locking module for python.

Originally designed for following projects:

Module provides python API and simple CLI interface.

Resource is released in following cases:

  • process ends
  • when context ends when lockable.auto_lock(..) is used
  • allocation.unlock() is called
  • lockable.unlock() is called

Resources data provider support following mechanisms:

  • resources.json file in file system
  • python list of dictionaries
  • http uri which points to API and is used with HTTP GET method. API should provide resources.json data as json object.

CLI interface

% lockable --help
usage: lockable [-h] [--validate-only] [--lock-folder LOCK_FOLDER] [--resources RESOURCES]
[--timeout TIMEOUT] [--hostname HOSTNAME]
[--requirements REQUIREMENTS]
[command [command ...]]

run given command while suitable resource is allocated.
Usage example: lockable --requirements {"online":true} echo using resource: $ID

positional arguments:
command Command to be execute during device allocation

optional arguments:
-h, --help show this help message and exit
--validate-only Only validate resources.json
--lock-folder LOCK_FOLDER
lock folder
--resources RESOURCES
Resources file (utf-8) or http uri
--timeout TIMEOUT Timeout for trying allocate suitable resource
--hostname HOSTNAME Hostname
--requirements REQUIREMENTS
requirements as json string

API's

Constructor

lockable = Lockable([hostname], [resource_list_file], [resource_list], [lock_folder])

Allocation

allocation_context = lockable.lock(requirements, [timeout_s])
print(allocation_context.resource_info)
print(allocation_context.resource_id)
allocation_context.unlock()
# or using resource info
lockable.unlock(allocation_context)

Allocation context contains following API:

  • requirements: dict Original requirements for allocation
  • resource_info: dict Allocated resource information
  • unlock(): func release resource lock function
  • allocation_queue_time: timedelta How long waited before allocation
  • allocation_start_time: datetime when allocation was started
  • release_time: datetime when allocation was ended
  • alloc_id: str allocation id
  • allocation_durations: timedelta how long time allocation takes

or using context manager which unlock automatically

with lockable.auto_lock(requirements, [timeout_s]) as allocation:
print(allocation.resource_info)

Resource requirements are evaluated using mongoquery, so MongoDB-style operators like $in and $gt are supported when selecting resources.

Tips:

You can allocate also offline devices by set requirements "online": None . You can ignore also hostname same same way by setting it to None`

About

py-lockable, python resource locking/reservation/allocation library

Topics

Resources

Readme

License

MIT license

Security policy

Security policy

Stars

Watchers

Forks

Contributors

Languages