gpt4 book ai didi

python - 字符串作为具有多处理访问的发送缓冲区

转载 作者:太空宇宙 更新时间:2023-11-03 18:17:45 26 4
gpt4 key购买 nike

在Python中,如何用数据行(字符串)填充缓冲区并在第二个进程中使用它?这里有很多示例从字符串中添加和读取行,但我需要从字符串中删除消耗的行,以便字符串充当缓冲区。

示例:从串行端口读取零星数据并通过 TCP/IP 将其发送到服务器。一个循环内逐行且无缓冲 = 没问题,但如果目标无法到达,数据应存储在缓冲区中,然后在连接可用时发送。

#!/usr/bin/python
import serial
import socket
from multiprocessing import Process

ip = "someURL"
port = 12345
ser = serial.Serial("/dev/ttyUSB0", 57600, timeout=0)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

def serial_reader():
while True:
for line in ser.read():
try:
response = ser.readlines(None)
response = str(response)
message = response[7:]
except:
print datetime.datetime.now(), " No data from serial connection."
##

def data_sender():
s.connect((ip, port))
while True:
for line in queue():
try:
s.send(message)
except:
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, port))
continue
except:
s.close()
##

if __name__ == '__main__':
Process(target=serial_reader).start()
Process(target=data_sender).start()

最佳答案

我认为实现你想要的最好方法是使用队列:

从多处理导入队列

具体使用queue.put()将字符串放入队列,queue.get()检索它,以及queue.task_done() 表示任务已完成。

https://docs.python.org/2/library/queue.html#Queue.Queue

如果您需要更大的枪,请查看 RabbitMQ 和实现 AMPQ 协议(protocol)的 Python 库,例如 rabbitpy。这是进程间/服务间通信的事实上的标准,并且已经内置了许多有用的东西,例如在进程关闭时保留消息、跨多个进程的负载平衡任务等。

关于python - 字符串作为具有多处理访问的发送缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24742585/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com