2017-03-08 50 views
0

在OpenWrt上可以運行Python代碼(確切地說是迷你Python),但即使是一個簡單的「Hello World」Python腳本也需要6-8秒跑步。如何加速OpenWrt(嵌入式Linux)上的python腳本(缺少pyc)

從我的調查中可以看出,所有Python模塊都保存在py源代碼中,並在每次運行時都在內存中編譯。

由於大約有20個或更多的模塊,並且OpenWrt在小型嵌入式設備上運行,所以即使是最簡單的Python腳本也會導致延遲。

如何加快在OpenWrt上執行Python代碼?

+0

OpenWrt是一個折衷 - 在這種情況下,關於空間與時間。這段代碼是否需要在你的無線路由器上運行? –

+0

是這段代碼需要在wifi路由器上運行,也就是說它不是一個wifi路由器,它是一個恰好也有wifi芯片的嵌入式系統。我在這個設備中使用python來收集和處理傳感器數據。由於系統是如何設計的,所以不可能將數據發送到雲端,它必須在本地進行處理。 – valentt

回答

0

爲了將Python腳本速度提高10倍以上,可以選擇預編譯所有庫並將它們編寫爲pyc文件。

如果你不這樣做,那麼所有的庫每次動態編譯,這是非常耗時的cpu和螞蟻任務。

您需要擁有至少4MB可用空間的設備,因爲您正在爲時間交換空間。

我的竅門是如果有少於150個pyc文件,並且如果要從py編譯python到pyc,則在啓動時創建檢查。

# count python pyc modules and generate if needed 
pyc=`find/-name *.pyc | wc -l` 
if [ $pyc -lt 150 ]; then 
    python -m compileall 
fi 

如果你仍然看到緩慢的python執行檢查是否一些python庫不位於某些子目錄中。例如,python-serial是爲了獲得全速,我添加了python-serial目錄來升級腳本。

# count python pyc modules and generate if needed 
pyc=`find/-name *.pyc | wc -l` 
if [ $pyc -lt 400 ]; then 
    python -m compileall 
    python -m compileall /usr/lib/python2.7/site-packages/serial/*.py 
    python -m compileall /usr/lib/python2.7/site-packages/serial/tools/*.py 
    python -m compileall /usr/lib/python2.7/site- 
packages/serial/urlhandler/*.py 
fi 

而這就是享受的OpenWrt /勒德系統速度極快的Python腳本!