python 並發 異常處理 多執行緒 多進程 協程
多執行緒
在多重執行緒環境中,每個執行緒都有自己的執行流和堆疊。異常發生時,通常只會影響該特定執行緒。為了處理執行緒中的異常,可以使用 threading.Thread()
的 join()
方法或 Thread.exc_info
屬性。
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}")
多重行程
在多進程環境中,每個進程都有自己獨立的記憶體空間和執行流。異常發生時,它會影響整個進程。要處理進程中的異常,可以使用 multiprocessing.Process()
的 join()
方法或 Process.exitcode
屬性。
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}")
協程
協程是輕量級線程,在單線程環境中執行。異常發生時,它會傳播到協程的呼叫者。要處理協程中的異常,可以使用 asyncio.Task.exception()
方法。
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())
最佳實踐
結論
在 Python 並發中,異常處理至關重要,因為它可以確保應用程式在異常情況下保持穩定和可靠。透過掌握多執行緒、多進程和協程中的異常處理技術,開發人員可以建立健壯且可靠的並發應用程式。始終記住捕獲和處理異常,並遵循最佳實踐,以提高應用程式的整體品質和使用者體驗。
以上是Python 並發程式設計中的異常處理:確保應用程式的穩定性的詳細內容。更多資訊請關注PHP中文網其他相關文章!