Application Timers (bpy.app.timers)
Run a Function in x Seconds
import bpy
def in_5_seconds():
print("Hello World")
bpy.app.timers.register(in_5_seconds, first_interval=5)
Run a Function every x Seconds
import bpy
def every_2_seconds():
print("Hello World")
return 2.0
bpy.app.timers.register(every_2_seconds)
Run a Function n times every x seconds
import bpy
counter = 0
def run_10_times():
global counter
counter += 1
print(counter)
if counter == 10:
return None
return 0.1
bpy.app.timers.register(run_10_times)
Assign parameters to functions
import bpy
import functools
def print_message(message):
print("Message:", message)
bpy.app.timers.register(functools.partial(print_message, "Hello"), first_interval=2.0)
bpy.app.timers.register(functools.partial(print_message, "World"), first_interval=3.0)
Use a Timer to react to events in another thread
You should never modify Blender data at arbitrary points in time in separate threads. However you can use a queue to collect all the actions that should be executed when Blender is in the right state again. Pythons queue.Queue can be used here, because it implements the required locking semantics.
import bpy
import queue
execution_queue = queue.Queue()
# This function can savely be called in another thread.
# The function will be executed when the timer runs the next time.
def run_in_main_thread(function):
execution_queue.put(function)
def execute_queued_functions():
while not execution_queue.empty():
function = execution_queue.get()
function()
return 1.0
bpy.app.timers.register(execute_queued_functions)
- bpy.app.timers.is_registered(function)
Check if this function is registered as a timer.
- Parameters
function (int) – Function to check.
- Returns
True when this function is registered, otherwise False.
- Return type
bool
- bpy.app.timers.register(function, first_interval=0, persistent=False)
Add a new function that will be called after the specified amount of seconds. The function gets no arguments and is expected to return either None or a float. If
None
is returned, the timer will be unregistered. A returned number specifies the delay until the function is called again.functools.partial
can be used to assign some parameters.- Parameters
function (Callable[[], Union[float, None]]) – The function that should called.
first_interval (float) – Seconds until the callback should be called the first time.
persistent (bool) – Don’t remove timer when a new file is loaded.
- bpy.app.timers.unregister(function)
Unregister timer.
- Parameters
function (function) – Function to unregister.