2012-02-27 51 views
1

如果Mac機器上有可用資源,則需要編寫一個轉碼腳本,該腳本會發出適當的ffmpeg命令。該機器是2 x 2.66 GHz 6核。基本上我想採用的邏輯是:檢查可用的處理核心

[cron every x minutes] 
if available_cores: 
    pull front file in queue and transcode 
else: 
    pass 

我將如何檢查,看看是否有可用的處理單元運行ffmpeg

回答

1

我會使用正常運行時間命令的負載平均值,如果負載足夠低,則啓動一個負載平均值。不太可能有閒置的核心,因爲任何現代系統都有足夠的隨機低優先級的東西在後臺運行,你永遠不會看到一個完全空閒的低。所以尋找一個低負荷的平均值,並基於此。

1

的/ proc/cpuinfo中會給你一個核心數量

,所以你可以閱讀和拉內核的數量。

然後做一個進程列表並計數FFMPEG進程。

從另一箇中減去一個,你的狀態非常好。

這應該給你有條件的。

或者通過正常運行時間查看負載,並根據所提供的值執行條件。

在SMP下,unix下也有一個進程與CPU的親和性。

看看工具taskset。您可能需要在/ var某處設置進程ID跟蹤器,然後使用腳本管理關聯。

3

使用Unix的什麼都給你:)我建議經常未知batch程序(的at部分)時,平均負載低於特定的閾值,把它們在隊列中,將調用argumented程序(一個或多個)。 man batch

+0

這聽起來像個好主意。請給我看一個粗略的代碼示例,說明如何根據平均負載排隊? – David542 2012-02-27 03:39:40

+0

@ David542,因爲你需要排隊一個作業(命令行,在你的情況下'ffmpeg'),只需在其上加上'batch'即可。 '批量'(或者''atrun'或者'launchd')將定期檢查負載平均值,並且如果在閾值下面調用排隊的命令,並且重複。標準輸出和標準錯誤結果通過電子郵件發送給Unix用戶(但通常該作業將管理日誌輸出)。配置負載平均閾值通常是Unix特有的。 – Xailor 2012-02-27 04:57:53