所以我正在研究一个Matlab应用程序,它必须与Python脚本进行一些通信。被调用的脚本是一个简单的客户端软件。作为一个方面说明,如果有可能有一个Matlab客户端和一个Python服务器通信,这将完全解决这个问题,但我还没有找到一种方法来解决这个问题。matlab最佳的Python通信方式
总之,在网上搜索,我发现两种方法来调用Python脚本,或者由system()
命令或编辑perl.m文件来调用Python脚本,而不是之后。这两种方式的速度都很慢(tic
将它们强制为> 20ms,并且运行速度必须高于6ms),因为此调用将处于非常时间敏感的循环中。
作为一个解决方案,我想我可以在某个位置保存一个文件,让我的Python脚本不断检查这个文件,并在找到它时执行我想要的命令。现在,在对每个步骤进行计时并总结之后,我发现它的速度非常快(接近100倍,因此速度足够快),我无法真正相信这一点,或者说我不明白为什么调用python脚本的速度如此之慢(而不是我对这个问题不仅有肤浅的认识)。我还发现这个解决方案非常混乱和丑陋,所以只想检查一下,首先,这是一个好主意,其次,还有更好的方法吗?
最后,我意识到,Python time.time()
和Matlab tic
,toc
可能不够精确,以衡量时间正确的规模,这也是我问为什么。
你是说[地位,cmdout] =系统(“蟒蛇pyscript.py”)需要20毫秒,但保存(“flagfile.txt”)和那么从deamon python进程读取输出需要0.2ms? 你甚至在第二种情况下('cmdout')如何获得python进程的输出? 为什么后者更快的猜测是python进程已经启动,而在第一种情况下,你需要启动一个进程,加载python interpreter等。 我会研究使用命名管道(on * nix ),尽管matlab似乎并不太容易。 –
抓住上面关于matlab +命名管道的负面评论,你可以在命名管道上使用fopen,fscanf等,所以现在你只需要在python端打开相应的管道,然后拿出一个适当的通信协议为输出 –
谢谢,我用命名管道,足够好的解决方案,并确保足够快。 – jakelamotta