pyiron_base.database.generic.ConnectionWatchDog#

class pyiron_base.database.generic.ConnectionWatchDog(conn, lock, timeout=60)[source]#

Bases: Thread

Helper class that closes idle connections after a given timeout.

Initialize it with the connection to watch and a lock that protects it. The lock prevents the watchdog from killing a connection that is currently used. The timeout is in seconds.

>>> conn = SqlConnection(...)
>>> lock = threading.Lock()
>>> dog = ConnectionWatchDog(conn, lock, timeout=60)

After it is created, :method:`.kick()` the watchdog periodically before the timeout runs out. It is important to acquire the lock when using the connection object.

>>> dog.kick()
>>> with lock:
...    conn.execute(...)
>>> dog.kick()

Once you want to finish the connection or want to make sure the watchdog quit, call :method:`.kill()` to shut it down. This also causes the watch dog to try and close the connection.

>>> dog.kill()
__init__(conn, lock, timeout=60)[source]#

Create new watchdog.

Parameters:
  • conn – any python object with a close() method.

  • lock (threading.Lock) – lock to protect conn

  • timeout (int) – time in seconds before the watchdog closes the connection.

Methods

__init__(conn, lock[, timeout])

Create new watchdog.

getName()

Return a string used for identification purposes only.

isDaemon()

Return whether this thread is a daemon.

is_alive()

Return whether the thread is alive.

join([timeout])

Wait until the thread terminates.

kick()

Restarts the timeout.

kill()

Stop the watchdog and close the connection.

run()

Starts the watchdog.

setDaemon(daemonic)

Set whether this thread is a daemon.

setName(name)

Set the name string for this thread.

start()

Start the thread's activity.

Attributes

daemon

A boolean value indicating whether this thread is a daemon thread.

ident

Thread identifier of this thread or None if it has not been started.

name

A string used for identification purposes only.

native_id

Native integral thread ID of this thread, or None if it has not been started.

property daemon#

A boolean value indicating whether this thread is a daemon thread.

This must be set before start() is called, otherwise RuntimeError is raised. Its initial value is inherited from the creating thread; the main thread is not a daemon thread and therefore all threads created in the main thread default to daemon = False.

The entire Python program exits when only daemon threads are left.

getName()#

Return a string used for identification purposes only.

This method is deprecated, use the name attribute instead.

property ident#

Thread identifier of this thread or None if it has not been started.

This is a nonzero integer. See the get_ident() function. Thread identifiers may be recycled when a thread exits and another thread is created. The identifier is available even after the thread has exited.

isDaemon()#

Return whether this thread is a daemon.

This method is deprecated, use the daemon attribute instead.

is_alive()#

Return whether the thread is alive.

This method returns True just before the run() method starts until just after the run() method terminates. See also the module function enumerate().

join(timeout=None)#

Wait until the thread terminates.

This blocks the calling thread until the thread whose join() method is called terminates – either normally or through an unhandled exception or until the optional timeout occurs.

When the timeout argument is present and not None, it should be a floating-point number specifying a timeout for the operation in seconds (or fractions thereof). As join() always returns None, you must call is_alive() after join() to decide whether a timeout happened – if the thread is still alive, the join() call timed out.

When the timeout argument is not present or None, the operation will block until the thread terminates.

A thread can be join()ed many times.

join() raises a RuntimeError if an attempt is made to join the current thread as that would cause a deadlock. It is also an error to join() a thread before it has been started and attempts to do so raises the same exception.

kick() None[source]#

Restarts the timeout.

kill() None[source]#

Stop the watchdog and close the connection.

property name#

A string used for identification purposes only.

It has no semantics. Multiple threads may be given the same name. The initial name is set by the constructor.

property native_id#

Native integral thread ID of this thread, or None if it has not been started.

This is a non-negative integer. See the get_native_id() function. This represents the Thread ID as reported by the kernel.

run() None[source]#

Starts the watchdog.

setDaemon(daemonic)#

Set whether this thread is a daemon.

This method is deprecated, use the .daemon property instead.

setName(name)#

Set the name string for this thread.

This method is deprecated, use the name attribute instead.

start()#

Start the thread’s activity.

It must be called at most once per thread object. It arranges for the object’s run() method to be invoked in a separate thread of control.

This method will raise a RuntimeError if called more than once on the same thread object.