python Concurrency Pengendalian pengecualian Multi-threading Coroutine berbilang proses
Berbilang benang
Dalam persekitaran berbilangbenang, setiap utas mempunyai aliran dan susunan pelaksanaannya sendiri. Apabila pengecualian berlaku, ia biasanya hanya mempengaruhi urutan tertentu itu. Untuk mengendalikan pengecualian dalam urutan, anda boleh menggunakan atribut 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}")
Pelbagai proses
Dalam persekitaran berbilang proses, setiap proses mempunyai ruang ingatan dan aliran pelaksanaannya sendiri. Apabila pengecualian berlaku, ia menjejaskan keseluruhan proses. Untuk mengendalikan pengecualian dalam proses, anda boleh menggunakan atribut 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}")
Coroutine
Coroutine ialah benang ringan yang dilaksanakan dalam persekitaran satu benang. Apabila pengecualian berlaku, ia disebarkan kepada pemanggil coroutine. Untuk mengendalikan pengecualian dalam coroutine, anda boleh menggunakan kaedah 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())
Amalan Terbaik
Kesimpulan
DalamPython bersamaan, pengendalian pengecualian adalah penting kerana ia memastikan aplikasi kekal stabil dan boleh dipercayai dalam keadaan tidak normal. Dengan menguasai teknik pengendalian pengecualian dalam multithreading, multiprocessing dan coroutine, pembangunboleh membina aplikasi serentak yang mantap dan boleh dipercayai. Sentiasa ingat untuk menangkap dan mengendalikan pengecualian dan mengikuti amalan terbaik untuk meningkatkan kualiti keseluruhan aplikasi dan pengalaman pengguna anda.
Atas ialah kandungan terperinci Pengendalian pengecualian dalam pengaturcaraan serentak Python: memastikan kestabilan aplikasi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!