python Linux ipc通信之消息队列实例
消费端
import posix_ipc
import selectors
mq = posix_ipc.MessageQueue("/python_ipc_test", flags=posix_ipc.O_CREAT,
max_messages=1024, max_message_size=1024 * 1024)
mq.block = False
counter = 0
def accept(message_queue, mask):
global counter
(msg, prio) = message_queue.receive()
counter += 1
print(f" \r{len(msg)}, Priority:{prio},{counter}", end="")
sel = selectors.DefaultSelector()
sel.register(mq, selectors.EVENT_READ, accept)
while True:
try:
events = sel.select()
for key, mask in events:
callback = key.data
callback(key.fileobj, mask)
except Exception as e:
import traceback
print(traceback.format_exc())
break
finally:
""
mq.unlink()
mq.close()
生产端
import time
import traceback
import posix_ipc
mq = posix_ipc.MessageQueue("/python_ipc_test")
mq.block = True
counter = 0
s_time = time.time()
for i in range(500000):
try:
mq.send("1" * 1024*5)
counter += 1
print(f'\r send counter:{counter}', end="")
except Exception as e:
print(traceback.format_exc())
finally:
""
print("")
print(f"use time: {time.time() - s_time}")