class cloudsync.Runnable

Abstract base class for a runnable service.

User needs to override and implement the “do” method.

static backoff()

Raises an exception, interrupting the durrent do() call, and sleeping for backoff seconds.

abstract do()

Override this to do something in a loop.


Cleanup code goes here. This is called when a service is stopped.

in_backoff = 0.0

Current backoff seconds, 0.0 if not in a backoff state


Call this instead of sleep, so the service can be interrupted

max_backoff = 1.0

Max backoff time in seconds

min_backoff = 0.01

Min backoff time in seconds

mult_backoff = 2.0

Backoff multiplier


Sets a “nothing happened” flag. This will cause backoff to remain the same, even on success.

run(*, timeout=None, until=None, sleep=0.001)

Calls do in a loop.


timeout: stop calling do after secs until: lambda returns bool sleep: seconds

If an unhandled exception occurs, backoff sleep will occur.

service_name = None

The name of this runnable service, defaults to the class name

start(*, daemon=True, **kwargs)

Start a thread, kwargs are passed to run()

property started

True if the service has been started and has not finished stopping

stop(forever=True, wait=True)

Stop the service, allowing any do() to complete first.

static stop_all(runnables: List[Runnable], forever: bool = True, wait: bool = True)

Convenience function for stopping multiple Runnables efficiently.

property stopped

Set when you call stop(), causes the services to drop out.


Wait for the service to stop.


Wake up, if do was sleeping, and do things right away.