所以我正在研究一個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