在不同进程之间实现队列和线程的通信,可以使用消息队列和进程间共享内存来实现。
import multiprocessing as mp
def producer(queue):
for i in range(10):
queue.put(i)
def consumer(queue):
while True:
item = queue.get()
if item is None:
break
print("Consumed:", item)
if __name__ == "__main__":
queue = mp.Queue()
p1 = mp.Process(target=producer, args=(queue,))
p2 = mp.Process(target=consumer, args=(queue,))
p1.start()
p2.start()
p1.join()
queue.put(None)
p2.join()
在上面的代码中,我们创建了一个mp.Queue()
对象作为队列,然后创建了两个进程,一个作为生产者向队列中放入数据,另一个作为消费者从队列中取出数据并进行处理。
import multiprocessing as mp
def producer(shared_list):
for i in range(10):
shared_list.append(i)
def consumer(shared_list):
while True:
if len(shared_list) == 0:
break
item = shared_list.pop(0)
print("Consumed:", item)
if __name__ == "__main__":
shared_list = mp.Manager().list()
p1 = mp.Process(target=producer, args=(shared_list,))
p2 = mp.Process(target=consumer, args=(shared_list,))
p1.start()
p2.start()
p1.join()
p2.join()
在上面的代码中,我们使用mp.Manager().list()
创建了一个共享的列表对象shared_list
,然后创建了两个进程,一个作为生产者向共享列表中放入数据,另一个作为消费者从共享列表中取出数据并进行处理。
需要注意的是,进程间共享内存的操作需要使用锁机制来保证数据的一致性,避免多个进程同时访问共享内存导致的竞争条件。上述示例代码中没有使用锁机制,仅作为示例演示进程之间的通信方式。在实际应用中,需要根据具体需求进行合适的加锁操作来保证数据的正确性。
下一篇:不同进程之间共享值的问题