Skip to content
Snippets Groups Projects
tasks_queue.py 1011 B
Newer Older
  • Learn to ignore specific revisions
  • from bpy.app.handlers import persistent
    
    Vilem Duha's avatar
    Vilem Duha committed
    from blenderkit import utils
    
    
    @persistent
    def scene_load(context):
    
        if not (bpy.app.timers.is_registered(queue_worker)):
    
            bpy.app.timers.register(queue_worker)
    
    
    Vilem Duha's avatar
    Vilem Duha committed
    def get_queue():
    
        # we pick just a random one of blender types, to try to get a persistent queue
        t = bpy.types.Scene
    
        if not hasattr(t, 'task_queue'):
            t.task_queue = queue.Queue()
        return t.task_queue
    
    Vilem Duha's avatar
    Vilem Duha committed
    
    
    def add_task(task):
        q = get_queue()
        q.put(task)
    
    def queue_worker():
    
    Vilem Duha's avatar
    Vilem Duha committed
        q = get_queue()
        while not q.empty():
            utils.p('as a task:   ')
    
            print('window manager', bpy.context.window_manager)
    
    Vilem Duha's avatar
    Vilem Duha committed
            task = q.get()
    
    Vilem Duha's avatar
    Vilem Duha committed
            try:
                task[0](*task[1])
            except Exception as e:
                utils.p('task failed:')
                print(e)
    
    Vilem Duha's avatar
    Vilem Duha committed
    
    
        bpy.app.handlers.load_post.append(scene_load)
    
    
        bpy.app.handlers.load_post.remove(scene_load)