2010-07-12 56 views
0

什麼是最好的在Python中做一個工作ID計數器?例如,如果一個Job ID的值爲「0」,並且每次有人運行該腳本,計數器都會上升一個?Python:JobID計數器

E.G.

X = 0 

Perform_some_process 

x +=1 

現在x的值將是1,但如果我再次運行腳本x將等於1,而不是2。當有人第二次運行腳本時,如何做到這一點x等於2?等等,以備將來運行。

回答

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數據庫文件可能是將它們放在一起的最方便的方法。

+0

BerkDB([bsddb.db](http://www.jcea.es/programacion/pybsddb.htm))也不錯。 – detly 2010-07-12 04:12:43

+0

工廠。謝謝您的幫助 – Harpal 2010-07-12 04:17:17