I have a python script that receives incoming messages from web and process the data: async with asyncio.TaskGroup() as task_group: processor_task = task_group.create_task(processor.start(message), name=f"process_message_{message.sender_id}_task"  I added naming for tasks with f-string interpolation so in the debugging i know which task is doing what and for who. Each iteration of message processing may take up to an hour. I want to only process one message from a sender at a time, however, senders sometimes send multiple messages. How can i drop further messages from the same sender_id until there is no task running for them? How can i check all running tasks for a same name before creating a task in TaskGroup? I Tried reading the documentation of TaskGroup but i didn't found anything related.
you can keep track of the working tasks like this background_tasks = set() async with asyncio.TaskGroup() as task_group: if sender_id not in background_tasks: # check if the sender has a task running processor_task = task_group.create_task(processor.start(message), name=f"process_message_{message.sender_id}_task") background_tasks.add(sender_id) # add to background tasks processor_task.add_done_callback(lambda x: background_tasks.discard(sender_id)) # remove from background tasks after the task is finished else: print(f'user {sender_id} already has a task running') 