使用 IBM Spectrum LSF API Python 封套
IBM® Spectrum LSF API 的 Python 封套可讓使用者從 Python呼叫 LSF API。 您可以使用「簡化封套和介面產生器 (SWIG)」來建立 Python 封套,這是用來連接 LSF C API 和 Python的工具。
關於此作業
您可以將自己的 Python 封套提供給 GitHub上 Python 的開放程式碼 LSF API: https://github.com/PlatformLSF/platform-python-lsf-api。
從 Python 封套中的字串陣列對映至 C LSF API 中的 char * *
關於此作業
在 LSF 9.1.2 API 的 Python 封套中,會移除在 C 中將 Python 字串陣列轉換成 C char** 的函數 typemap(in) char** ,因為當輸入字串陣列不是以空值結尾時這個函數中的錯誤。
程序
例如:
$ cat test1.py
from pythonlsf import lsf
strArr = lsf.new_stringArray(1); # Create a new stringArray, length 1
lsf.stringArray_setitem(strArr, 0, "normal"); # Set its value
intp_num_queues = lsf.new_intp(); # Create an int ptr
lsf.intp_assign(intp_num_queues, 1); # Set the int value, which is the queue number
if lsf.lsb_init("test") > 0: # LSB initialization
exit(-1);
queueInfo = lsf.lsb_queueinfo(strArr,intp_num_queues,None,None,0); # Query queue info
if queueInfo == None:
exit(0);
print ’queue name = %s’ % queueInfo.queue;
print ’queue description = %s’ % queueInfo.description;
$ python test1.py
queue name = normal
queue description = For normal low priority jobs, running only if hosts are lightly loaded.
查詢從 LSF API 傳回的多個實體
關於此作業
LSF API 支援多個要查詢並傳回的實體,而 Python 中的類似 API 需要 LSF Python 封套,例如,從 lsf.lsb queueinfo()傳回多個 queueinfo 實體。 您需要根據 LSF C API 和 SWIG 來產生必要的 Python 介面。 下列範例使用 LSF C API lsb queueinfo() 來示範如何延伸 Python LSF 封套。
程序
當您查詢具有一個以上不存在佇列名稱的佇列清單時, Python API get queue info by name() 會傳回[None]值。 您可能預期會傳回現有佇列名稱的實體,但這是設計的行為。 下列範例顯示如何測試此項目:
$ cat test4.py
from pythonlsf import lsf
strArr = lsf.new_stringArray(2)
lsf.stringArray_setitem(strArr, 0, "normal")
lsf.stringArray_setitem(strArr, 1, "doesnotexist")
if lsf.lsb_init("test") > 0:
exit(-1);
print lsf.get_queue_info_by_name(strArr, 2)
$ python test4.py
[None]
低階 LSF C 函數 lsb_queueinfo() 會傳回NULL如果佇列、主機或使用者名稱中的使用者指定引數發生任何錯誤。 您可以使用在內部呼叫 lsb_queueinfo()的 LSF bqueues 指令來驗證:
下列 bqueues 指令顯示存在兩個佇列的正常輸出:
$ bqueues normal public
QUEUE_NAME PRIO STATUS MAX JL/U JL/P JL/H NJOBS PEND RUN SUSP
normal 30 Open:Active - - - - 0 0 0 0
public 35 Open:Active - - - - 0 0 0
如果您指定不存在的佇列名稱,則會顯示錯誤訊息,且不會顯示其他輸出:
$ bqueues normal doesnotexist
doesnotexist: No such queue
這與 Python API 測試一致。
查詢從 LSF API 傳回的所有實體
關於此作業
透過指定所要求的資源, LSF API 支援傳回所指定資源的所有實體,例如, LSF Python 封套需要 Python的類似 API ,以從 lsf.lsb queueinfo()傳回所有 queueinfo 實體。 您需要根據 LSF C API 和 SWIG 來產生必要的 Python 介面。 下列範例使用 LSF C API lsb queueinfo() 來示範如何延伸 Python API。