A disk backed dictionary implementation.
Project description
IODict
iodict is a thread safe object store which is writting in pure python.
The dictionary implementation follows the Dict
API, but stores
items using their birthtime allowing users to treat this datastore as a
file system backed OrderedDict
.
Items in the object store use file system attributes, when available to store key and birthtime information. File system attributes enhance the capability of the object store; however, they're not required. In the event xattrs are not available, file stat is used for file creation time. While stat works, in many cases, item ordering is not guarenteed.
Dictionary Usage
import iodict
data = iodict.IODict(path='/tmp/iodict') # Could be any path on the file system
data["key"] = "value"
data
{'key': "value"}
dir(data)
['__class__',
'__delattr__',
'__delitem__',
'__dict__',
'__dir__',
'__doc__',
'__enter__',
'__eq__',
'__exit__',
'__format__',
'__ge__',
'__getattribute__',
'__getitem__',
'__gt__',
'__hash__',
'__init__',
'__init_subclass__',
'__iter__',
'__le__',
'__len__',
'__lt__',
'__module__',
'__ne__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__setitem__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__weakref__',
'_db_path',
'_encoder',
'_lock',
'clear',
'copy',
'fromkeys',
'get',
'items',
'keys',
'pop',
'popitem',
'setdefault',
'update',
'values']
When running in a multiprocessing / threading application, a lock is required to be passed into the iodict class.
import threading
import iodict
data = iodict.IODict(path='/tmp/iodict', lock=threading.Lock)
By default, if no lock is provided, a multiprocessing lock will be created.
The lock object allows the iodict
to respect the locking paradigm of the
executing application.
Durable Queue Usage
The DurableQueue class is used to create a disk-backed queue which implements
the standarad queue.Queue
API.
import iodict
q = iodict.DurableQueue(path='/tmp/iodict') # Could be any path on the file system
q.put("test")
data = q.get()
data
'test'
Flushing Capable Queue Usage
The FlushQueue class is used to extend the capabilities of a standard queue object by providing an extension which can be used to flush the objects within queue to a disk. This is useful in situation when the application needs to halt or otherwise stop working, but the inflight processes need to be saved and resumed at a later time.
import queue
import iodict
class NewQueue(queue.Queue, iodict.FlushQueue):
def __init__(self, path, lock=None, semaphore=None):
super().__init__()
self.path = path
self.lock = lock
self.semaphore = semaphore
q = NewQueue(path='/tmp/iodict') # Could be any path on the file system
q.put("test")
q.qsize()
1
q.flush()
q.qsize()
0
q.ingest()
q.qsize()
1
q.get()
'test'
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file iodict-0.0.8.tar.gz
.
File metadata
- Download URL: iodict-0.0.8.tar.gz
- Upload date:
- Size: 10.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.9.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a935649906f10271159b08ffe556e44fa06a94f0e6a4bf5897120101b80a9f53 |
|
MD5 | dcaf33b5c6fdddac544556d2ec4cbe16 |
|
BLAKE2b-256 | 52743666b20c1d2f9d74a6811399ed674b603654fe6944560b757f2a720ffab1 |
File details
Details for the file iodict-0.0.8-py3-none-any.whl
.
File metadata
- Download URL: iodict-0.0.8-py3-none-any.whl
- Upload date:
- Size: 11.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.9.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4eb6cb0c324602c98542a18ac0cc4d8f45cdfb6d26d69cdba33cd9302f223a6b |
|
MD5 | d85f8a04ee9cf2620c1f49fda320f06b |
|
BLAKE2b-256 | f5b62fffcc50cfb74e45254690d19ed69dc9923c43da67a1142b0046eb44c334 |