解決方案
Python 程式碼的執行速度取決於許多因素,包括:
- API 的呼叫方式。
- 用於任務的 API 選擇。
- 軟體限制。
要確定您的執行速度是否可以提高,請執行以下步驟:
1. 盡量減少 task 打開和關閉的次數。
- 建立和設定 task 時,Python 必須定位並載入與初始化關聯的 DLL。這將增加執行時間。
- 如果可能,在開始時初始化一次任務,並在不關閉或重新初始化的情況下重複讀/寫操作。
- 注意: DAQmx 任務應該在您使用完硬體後打開一次並關閉一次。
2. 如果使用類比輸入/輸出,請嘗試使用stream_readers和stream_writers 。
3. 確保您正確安排了任務的時間。
- 導入 Python Module以對特定程式碼段計時。
注意:一個通用Module是使用 datetime 這個Module。 - 取得function 之前的時間,並在 function 之後立即再次取一次時間以計算執行所花費的時間。對每個功能重複此操作以確定哪個功能執行時間最長。
- 下面是一個 DAQmx 寫定時的例子。
import nidaqmx
import datetime
with nidaqmx.Task() as task:
#get module and channels
module1 = nidaqmx.system.System().devices[1].ao_physical_chans.all.name
task.ao_channels.add_ao_current_chan(module1)
#configure timing
task.timing.samp_timing_type = nidaqmx.constants.SampleTimingType.SAMPLE_CLOCK
acquis_type = nidaqmx.constants.AcquisitionType.FINITE
task.timing.cfg_samp_clk_timing(rate=24000,sample_mode=acquis_type,samps_per_chan=24)
#obtain start time, execute a write function, and then obtain the end time
st = datetime.datetime.now()
print(task.write([[0.001,0.002,0.003], [0.004,0.005,0.006], [0.007,0.008,0.009],[0.001,0.002,0.003], [0.004,0.005,0.006], [0.007,0.008,0.009],[0.001,0.002,0.003], [0.004,0.005,0.006]], auto_start=True))
et = datetime.datetime.now()
#calculate the difference between the start and end time, and print the result
ft = et - st
print(ft.microseconds)
4. 考慮以下軟體限制是否影響了您的執行速度。
- Windows 作業系統是不確定的,有幾個因素可能造成此結果: 持續執行且無法終止的後台任務、更新和程序。因此預計程式碼至少需要幾毫秒才能完成(可能更多,具體取決於程式碼的複雜性)。
- Python API 是 C API 之上的 Wrapper。因此Python 必須呼叫 DLL 來執行每個功能,每個 DLL 都需要處理器時間,因此請考慮修改您的程式碼以呼叫盡可能少的 DLL。
- PC 的 CPU 負載將對程式碼執行時間產生影響,所以如果 PC 正在執行後台應用程式、程序或更新,程式碼將需要更長的時間來執行。