Python API Docs: fix some examples
[blender.git] / doc / python_api / examples / bpy.app.timers.5.py
1 """
2 Use a Timer to react to events in another thread
3 ------------------------------------------------
4
5 You should never modify Blender data at arbitrary points in time in separate threads.
6 However you can use a queue to collect all the actions that should be executed when Blender is in the right state again.
7 Pythons `queue.Queue` can be used here, because it implements the required locking semantics.
8 """
9 import bpy
10 import queue
11
12 execution_queue = queue.Queue()
13
14 # This function can savely be called in another thread.
15 # The function will be executed when the timer runs the next time.
16 def run_in_main_thread(function):
17     execution_queue.put(function)
18
19 def execute_queued_functions():
20     while not execution_queue.empty():
21         function = execution_queue.get()
22         function()
23     return 1.0
24
25 bpy.app.timers.register(execute_queued_functions)