什麼是最好的在Python中做一個工作ID計數器?例如,如果一個Job ID的值爲「0」,並且每次有人運行該腳本,計數器都會上升一個?Python:JobID計數器
E.G.
X = 0
Perform_some_process
x +=1
現在x的值將是1,但如果我再次運行腳本x將等於1,而不是2。當有人第二次運行腳本時,如何做到這一點x等於2?等等,以備將來運行。
什麼是最好的在Python中做一個工作ID計數器?例如,如果一個Job ID的值爲「0」,並且每次有人運行該腳本,計數器都會上升一個?Python:JobID計數器
E.G.
X = 0
Perform_some_process
x +=1
現在x的值將是1,但如果我再次運行腳本x將等於1,而不是2。當有人第二次運行腳本時,如何做到這一點x等於2?等等,以備將來運行。
你需要「堅持」這個計數器 - 最簡單的就是使用一個文件來達到目的。例如:
import os
def onemore():
f = __file__ + '.counter'
if os.path.exists(f):
with open(f) as thefile:
counter = int(thefile.read())
else:
counter = -1
counter += 1
with open(f, 'w') as thefile:
thefile.write(str(counter) + '\n')
return counter
這可能會產生問題(缺少一些計數)如果腳本的多個實例已開始在完全相同的時間 - 如果這是你的問題,請告訴我們(和讓我們知道操作系統,你需要努力)瞭解更多關於如何在該關鍵文件上執行鎖定。
該解決方案還假定此Python(或字節碼)文件所在的目錄可由運行腳本的用戶身份寫入。如果這是一個問題,腳本需要一些配置文件,指示哪些目錄可以保證可由任何可能正在運行腳本的用戶寫入(並且將使用該目錄來形成字符串f
,即計數器文件的名稱)。
請注意,我將計數器文件的內容保存爲易於閱讀的形式 - 這是爲了便於調試(並且在文件中只有一個數字時支付極小的代價)。當然可以用二進制形式保存文件。
如果您的腳本需要保存許多信息,那麼sqlite
數據庫文件可能是將它們放在一起的最方便的方法。
BerkDB([bsddb.db](http://www.jcea.es/programacion/pybsddb.htm))也不錯。 – detly 2010-07-12 04:12:43
工廠。謝謝您的幫助 – Harpal 2010-07-12 04:17:17