在回答之前,請理解我不希望你爲我完成這項工作。對於我的(可能是理論上的)問題存在的原因以及對解決此問題的過程的解釋,我寧願讚賞一個措辭的答案。當有人爲我做這項工作時,我發現很難正確地學習。先謝謝你。python函數是線程安全嗎? (特別是這個?)
我有這個功能:它完全看起來像是在做什麼。它使用來自包含Facebook ID並返回ID的頁面中的HTML。
def getID(data): #Find an ID from HTML input.
data = str(data)
appstring = 'http://apps.facebook.com/castle_age/keep.php?user=' #We're gonna find this in the html.
appstr_start_pos = data.find(appstring) #Tell us where we found it oh mighty one!
if appstr_start_pos != -1: #If we find it.
begin_ID_pos = appstr_start_pos + len(appstring)
end_ID_pos = data.find('"', begin_ID_pos) #Find the end quote, that'll be the end of our ID string.
our_ID = data[begin_ID_pos:end_ID_pos]
return our_ID
現在我沒有它裝在我的課,它使用thread.Threading方法之一,但我仍然經常調用它。我的代碼現在只運行一個線程,可能我需要從另一個線程類調用此函數;這可能嗎?如果不是,我怎麼能在線程類之間使用這個函數?
問題的一個更簡單的形式:如果我從多線程環境調用這個函數,我會遇到問題,還是需要將它移動到它自己的類中?有沒有辦法讓函數在2個不同的線程對象之間保持可用(如果是的話,最簡單的方法是什麼)?
下面是完整的代碼:http://pastebin.com/txH8PvL3 - 請記住,這是一個在製品,如實踐學習線程...
「瞭解Python GIL」http://www.dabeaz.com/python/UnderstandingGIL.pdf描述了Python線程的工作原理 – jfs 2010-02-28 22:39:00
我最近閱讀了很多有關GIL的內容,尤其是davids使用優先級線程工作,以便在Python 3.2 GIL中有一個線程IO綁定和另一個CPU綁定時解決CPU/IO綁定問題。但是,當python調用一個函數...它做了該函數的COPY? (所以如果函數被調用(只要它不修改函數上面的某個作用域),它不會與另一個同時調用它的線程發生衝突? – ThantiK 2010-02-28 22:46:18