Run commands (which can be regular functions) in a FIFO queue. Can be run in a background thread.
Simple filling and running of the queue
from command_queue import CommandQueue from command_queue.commands import FunctionCommand import functools example_queue = CommandQueue() # Add example commands for i in range(100): example_queue.add_command( FunctionCommand(functools.partial(print, f"Running loop iteration {i}")) ) # Attempt to run command queue at 60 commands per second # Stop running once queue empties example_queue.spin(60, until_empty=True)
Example of ParallelCommandGroups
from command_queue import CommandQueue from command_queue.commands import FunctionCommand, ParallelCommandGroup import functools import time def do_something(): print(f"Something happended on {time.time()}") time.sleep(0.05) def do_something_2(): print(f"Something_2 happended on {time.time()}") time.sleep(0.05) example_queue = CommandQueue() # Add example non-parallel commands # These commands will run sequentially for i in range(2): example_queue.add_command(FunctionCommand(functools.partial(do_something))) # These commands will run at the same time using threads # Add example parallel command # These commands will run at the same time example_queue.add_command( ParallelCommandGroup( FunctionCommand(functools.partial(do_something_2)), FunctionCommand(functools.partial(do_something_2)), FunctionCommand(functools.partial(do_something_2)), FunctionCommand(functools.partial(do_something_2)), FunctionCommand(functools.partial(do_something_2)), FunctionCommand(functools.partial(do_something_2)), ) ) # Attempt to run command queue at 10 commands per second # Stop running once queue empties example_queue.spin(10, until_empty=True)