如何将大数据传递给 Python 脚本?
How to pass large data to Python script?
我有一个 C# (Mono) 应用程序,它从传感器获取数据并将其传递给 Python 脚本进行处理。它在 Raspberry Pi/Raspbian 上运行。该脚本在程序初始化时启动,运行 在后台等待数据传递给它。
数据由 1000 个样本组成,32 位双精度(总共 32 kbits)。目前我将数据写入文件并将文件路径传递给脚本。
我正在考虑通过将数据直接传递给脚本来加快处理时间,避免写入文件。但是,我看到命令行参数的字符数是有限的。
是否有通过避免文件 writing/reading 将数据传递给 Python 脚本的解决方案? 我读过一些关于内存映射的内容,但是不知道能不能解决。
将数据写入文件依赖于 raspberry pi 中使用的 Micro SDCard 的速度。 运行 将您的程序放在一个应用程序中是一种很好的做法,这样所有操作都使用相同的内存池。
如果不可能,要利用 RAM,您可以使用 MQTT 等通信协议。它对于 Raspberry Pi.
来说是轻量级的
MQTT 需要代理(服务器),您可以从使用 mosquitto (http://mosquitto.org/) 开始。使用 apt install mosquitto
for Raspbian.
安装它
在您的 python 和单声道源代码中,您可以使用您选择的 mqtt 客户端库。客户端库的一个示例是 paho-mqtt (https://www.eclipse.org/paho/).
您也可以使用原始套接字,但请注意每个数据包的最大数据量取决于您的环境,通常为 8KB。 https://docs.python.org/3/library/socket.html#socket.socket.recv
Is there a solution to pass the data to the Python script by avoiding
file writing/reading?
我只能想到两个办法:
您可以打开一个套接字,以便通过本地主机在两个程序之间进行通信。 C# 程序会将数据发送到该套接字,然后 Python 程序会读取它。
用 Python 或 C# 编写这两个程序。单个程序将捕获
数据并对其进行处理。
I've read something about memory mapping, but I do not know if it's a
solution.
内存映射就是把一个文件加载到内存中,一旦对它的工作完成,马上写回去。由于您有两个不同的流程,我认为它不适用于此处。
希望对您有所帮助。
我有一个 C# (Mono) 应用程序,它从传感器获取数据并将其传递给 Python 脚本进行处理。它在 Raspberry Pi/Raspbian 上运行。该脚本在程序初始化时启动,运行 在后台等待数据传递给它。
数据由 1000 个样本组成,32 位双精度(总共 32 kbits)。目前我将数据写入文件并将文件路径传递给脚本。
我正在考虑通过将数据直接传递给脚本来加快处理时间,避免写入文件。但是,我看到命令行参数的字符数是有限的。
是否有通过避免文件 writing/reading 将数据传递给 Python 脚本的解决方案? 我读过一些关于内存映射的内容,但是不知道能不能解决。
将数据写入文件依赖于 raspberry pi 中使用的 Micro SDCard 的速度。 运行 将您的程序放在一个应用程序中是一种很好的做法,这样所有操作都使用相同的内存池。
如果不可能,要利用 RAM,您可以使用 MQTT 等通信协议。它对于 Raspberry Pi.
来说是轻量级的MQTT 需要代理(服务器),您可以从使用 mosquitto (http://mosquitto.org/) 开始。使用 apt install mosquitto
for Raspbian.
在您的 python 和单声道源代码中,您可以使用您选择的 mqtt 客户端库。客户端库的一个示例是 paho-mqtt (https://www.eclipse.org/paho/).
您也可以使用原始套接字,但请注意每个数据包的最大数据量取决于您的环境,通常为 8KB。 https://docs.python.org/3/library/socket.html#socket.socket.recv
Is there a solution to pass the data to the Python script by avoiding file writing/reading?
我只能想到两个办法:
您可以打开一个套接字,以便通过本地主机在两个程序之间进行通信。 C# 程序会将数据发送到该套接字,然后 Python 程序会读取它。
用 Python 或 C# 编写这两个程序。单个程序将捕获 数据并对其进行处理。
I've read something about memory mapping, but I do not know if it's a solution.
内存映射就是把一个文件加载到内存中,一旦对它的工作完成,马上写回去。由于您有两个不同的流程,我认为它不适用于此处。
希望对您有所帮助。