python多进程通信
时间: 2023-08-15 11:14:54 浏览: 97
Python中的多进程通信可以使用多种方法,以下是几种常见的方式:
1. 队列(Queue):使用`multiprocessing.Queue`类可以在多个进程之间共享数据。一个进程可以将数据放入队列中,另一个进程可以从队列中取出数据。这提供了一种简单而安全的方式来进行进程间通信。
```python
from multiprocessing import Process, Queue
def producer(queue):
for i in range(10):
queue.put(i)
def consumer(queue):
while not queue.empty():
data = queue.get()
print(data)
if __name__ == '__main__':
queue = Queue()
p1 = Process(target=producer, args=(queue,))
p2 = Process(target=consumer, args=(queue,))
p1.start()
p2.start()
p1.join()
p2.join()
```
2. 管道(Pipe):使用`multiprocessing.Pipe`类可以创建一个管道,其中的两个端点可以分别由两个不同的进程使用。一个进程可以将数据写入管道,另一个进程可以从管道中读取数据。
```python
from multiprocessing import Process, Pipe
def sender(conn):
for i in range(10):
conn.send(i)
conn.close()
def receiver(conn):
while True:
if conn.poll():
data = conn.recv()
print(data)
else:
break
if __name__ == '__main__':
parent_conn, child_conn = Pipe()
p1 = Process(target=sender, args=(child_conn,))
p2 = Process(target=receiver, args=(parent_conn,))
p1.start()
p2.start()
p1.join()
p2.join()
```
3. 共享内存(Shared Memory):使用`multiprocessing.Value`或`multiprocessing.Array`可以创建一个可以在多个进程之间共享的变量。这些变量存储在共享内存中,可以被多个进程同时访问和修改。
```python
from multiprocessing import Process, Value, Array
def increment_counter(counter):
counter.value += 1
def modify_array(array):
for i in range(len(array)):
array[i] *= 2
if __name__ == '__main__':
counter = Value('i', 0)
array = Array('d', [1.0, 2.0, 3.0, 4.0, 5.0])
p1 = Process(target=increment_counter, args=(counter,))
p2 = Process(target=modify_array, args=(array,))
p1.start()
p2.start()
p1.join()
p2.join()
print(counter.value)
print(array[:])
```
这些是Python中常用的多进程通信方法,根据具体的需求选择适合的方式即可。
阅读全文