import threading helloworld = "start" def task1(name): print(f"Task 1 executing with name: {name}") return f"Hello, {name}!" def task2(age): global helloworld helloworld = 'done' print(f"Task 2 executing with age: {age}") return f"You are {age} years old." # Create thread objects for each task, passing arguments as a tuple thread1 = threading.Thread(target=task1, args=("John",)) thread2 = threading.Thread(target=task2, args=(25,)) # Start the threads thread1.start() thread2.start() # Wait for both threads to finish execution thread1.join() thread2.join() # Retrieve the return values from each thread result_task1 = thread1.result if hasattr(thread1, 'result') else None result_task2 = thread2.result if hasattr(thread2, 'result') else None print("All tasks completed") print("Result from Task 1:", result_task1) print("Result from Task 2:", result_task2) print(helloworld)