如果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
?
如果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
?
我會使用正常運行時間命令的負載平均值,如果負載足夠低,則啓動一個負載平均值。不太可能有閒置的核心,因爲任何現代系統都有足夠的隨機低優先級的東西在後臺運行,你永遠不會看到一個完全空閒的低。所以尋找一個低負荷的平均值,並基於此。
的/ proc/cpuinfo中會給你一個核心數量
,所以你可以閱讀和拉內核的數量。
然後做一個進程列表並計數FFMPEG進程。
從另一箇中減去一個,你的狀態非常好。
這應該給你有條件的。
或者通過正常運行時間查看負載,並根據所提供的值執行條件。
在SMP下,unix下也有一個進程與CPU的親和性。
看看工具taskset。您可能需要在/ var某處設置進程ID跟蹤器,然後使用腳本管理關聯。
使用Unix的什麼都給你:)我建議經常未知batch
程序(的at
部分)時,平均負載低於特定的閾值,把它們在隊列中,將調用argumented程序(一個或多個)。 man batch
這聽起來像個好主意。請給我看一個粗略的代碼示例,說明如何根據平均負載排隊? – David542 2012-02-27 03:39:40
@ David542,因爲你需要排隊一個作業(命令行,在你的情況下'ffmpeg'),只需在其上加上'batch'即可。 '批量'(或者''atrun'或者'launchd')將定期檢查負載平均值,並且如果在閾值下面調用排隊的命令,並且重複。標準輸出和標準錯誤結果通過電子郵件發送給Unix用戶(但通常該作業將管理日誌輸出)。配置負載平均閾值通常是Unix特有的。 – Xailor 2012-02-27 04:57:53