在Python中,可以使用multiprocessing
库来实现多进程编程。为了同步进程,你可以使用以下方法:
- 使用
Lock
或Semaphore
:
Lock
和Semaphore
是multiprocessing
库提供的同步原语,可以用来确保在同一时间只有一个进程可以访问共享资源。
示例:使用Lock
同步两个进程
import multiprocessing def worker(lock, i): lock.acquire() print(f"Process {i} is working") lock.release() if __name__ == "__main__": lock = multiprocessing.Lock() processes = [] for i in range(5): p = multiprocessing.Process(target=worker, args=(lock, i)) processes.append(p) p.start() for p in processes: p.join()
- 使用
Queue
或Pipe
:
Queue
和Pipe
是multiprocessing
库提供的线程安全的数据结构,可以用来在进程之间传递数据。
示例:使用Queue
同步两个进程
import multiprocessing def worker(queue): queue.put("Hello from process") if __name__ == "__main__": queue = multiprocessing.Queue() processes = [] for i in range(2): p = multiprocessing.Process(target=worker, args=(queue,)) processes.append(p) p.start() for p in processes: p.join() print(queue.get())
- 使用
Event
:
Event
是multiprocessing
库提供的一种同步原语,可以用来通知进程某个事件已经发生。
示例:使用Event
同步两个进程
import multiprocessing def worker(event): event.wait() # 等待事件被设置 print("Process is working") if __name__ == "__main__": event = multiprocessing.Event() processes = [] for i in range(2): p = multiprocessing.Process(target=worker, args=(event,)) processes.append(p) p.start() event.set() # 设置事件 for p in processes: p.join()
这些方法可以帮助你在多进程编程中实现同步。你可以根据具体需求选择合适的方法来同步进程。