Masalah dan penyelesaian biasa untuk pengaturcaraan pelbagai proses dalam Python
Abstrak: Dengan pembangunan perkakasan komputer, pemproses berbilang teras telah menjadi kebiasaan dalam komputer. Oleh itu, menggunakan sepenuhnya keupayaan pemproses berbilang teras adalah kunci untuk meningkatkan prestasi program. Dalam Python, pengaturcaraan berbilang proses ialah cara yang cekap untuk memanfaatkan pemproses berbilang teras. Walau bagaimanapun, pengaturcaraan pelbagai proses juga menghadapi beberapa masalah biasa. Artikel ini akan memperkenalkan masalah biasa pengaturcaraan berbilang proses dalam Python dan menyediakan penyelesaian dan contoh kod yang sepadan.
from multiprocessing import Process, Queue def worker(queue): while True: data = queue.get() if data is None: break # 处理数据 print("Processing data:", data) if __name__ == "__main__": num_processes = 4 queue = Queue() processes = [] for _ in range(num_processes): p = Process(target=worker, args=(queue,)) p.start() processes.append(p) # 向队列中添加数据 for i in range(10): queue.put(i) # 添加结束标志,让每个进程退出循环 for _ in range(num_processes): queue.put(None) # 等待子进程结束 for p in processes: p.join()
from multiprocessing import Process, Lock def worker(lock): # 加锁 lock.acquire() try: # 访问共享资源 print("Accessing shared resource") finally: # 释放锁 lock.release() if __name__ == "__main__": lock = Lock() processes = [] for _ in range(4): p = Process(target=worker, args=(lock,)) p.start() processes.append(p) for p in processes: p.join()
from multiprocessing import Pool def worker(x): if x == 0: raise Exception("Error: Division by zero") return 1 / x def handle_exception(e): print("Exception occurred:", e) if __name__ == "__main__": pool = Pool() results = [] for i in range(5): result = pool.apply_async(worker, args=(i,), error_callback=handle_exception) results.append(result) pool.close() pool.join() for result in results: if result.successful(): print("Result:", result.get())
Ringkasan: Apabila melakukan pengaturcaraan berbilang proses dalam Python, terdapat beberapa isu biasa yang perlu diberi perhatian, seperti komunikasi antara proses, sumber perkongsian persaingan, dan pengendalian pengecualian sub-proses. Dengan memilih penyelesaian yang sesuai dan menggunakan contoh kod yang sepadan, kami boleh menggunakan lebih cekap pemproses berbilang teras dalam pengaturcaraan berbilang proses dan meningkatkan prestasi program kami.
Kata kunci: Python, pengaturcaraan berbilang proses, komunikasi antara proses, persaingan sumber dikongsi, pengendalian pengecualian sub-proses, contoh kod
Atas ialah kandungan terperinci Masalah dan penyelesaian biasa untuk pengaturcaraan berbilang proses dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!