python Concurrency Exception handling Multiple threads Multi-process coroutine
Multithreading
In a multi- thread environment, each thread has its own execution flow and stack. When an exception occurs, it usually only affects that specific thread. To handle exceptions in a thread, you can use the join()
method of threading.Thread()
or the Thread.exc_info
attribute.
import threading def worker_thread(name): print(f"{name}: Starting") raise RuntimeError("Error in thread") try: threads = [] for i in range(5): thread = threading.Thread(target=worker_thread, args=(f"Thread {i}",)) threads.append(thread) for thread in threads: thread.start() thread.join() except RuntimeError as exc: print(f"Main thread: Exception occurred in child thread: {exc}")
multi-Progress
In a multi-process environment, each process has its own independent memory space and execution flow. When an exception occurs, it affects the entire process. To handle exceptions in a process, you can use the join()
method of multiprocessing.Process()
or the Process.exitcode
attribute.
import multiprocessing def worker_process(name): print(f"{name}: Starting") raise RuntimeError("Error in process") try: processes = [] for i in range(5): process = multiprocessing.Process(target=worker_process, args=(f"Process {i}",)) processes.append(process) for process in processes: process.start() process.join() except RuntimeError as exc: print(f"Main process: Exception occurred in child process: {exc}")
Coroutine
Coroutines are lightweight threads that execute in a single-threaded environment. When an exception occurs, it is propagated to the caller of the coroutine. To handle exceptions in coroutines, you can use the asyncio.Task.exception()
method.
import asyncio async def worker_coroutine(name): print(f"{name}: Starting") raise RuntimeError("Error in coroutine") async def main(): tasks = [] for i in range(5): task = asyncio.create_task(worker_coroutine(f"Coroutine {i}")) tasks.append(task) for task in tasks: try: await task except RuntimeError as exc: print(f"Main coroutine: Exception occurred in child coroutine: {exc}") asyncio.run(main())
Best Practices
in conclusion
In Python concurrency, exception handling is crucial because it ensures that the application remains stable and reliable under abnormal circumstances. By mastering exception handling techniques in multithreading, multiprocessing, and coroutines, developers can build robust and reliable concurrent applications. Always remember to catch and handle exceptions and follow best practices to improve the overall quality of your application and user experience.
The above is the detailed content of Exception handling in Python concurrent programming: ensuring application stability. For more information, please follow other related articles on the PHP Chinese website!