2014-07-21 15 views
1

爲Python串操作安全我有兩個線程調用以下功能:多線程經由「%」

template = 'My name is %s' 

def sayhi(name): 
    global template 
    print template % name 

線程A將調用如下:

sayhi('Tom') 

線程B將調用如如下:

sayhi('Jerry') 

我的問題是全局var'模板'是否安全。

非常感謝!

+0

'template'是否改變過? – NPE

+0

@NPE global var'template'在運行時間內不會改變。 – cnnbcza

回答

3

由於template永不改變,代碼是完美的罰款,並會按預期工作。

(如果template是如有更改,這將事情複雜化有點,答案是「這取決於你期待什麼。」)

+0

事實上,由於'template'永遠不會改變,所以根本不需要'global'聲明。 –

2

我覺得你擔心的是,template是關鍵部分。在更復雜的情況下,如果template的值將被更改,則必須在更改之前使用鎖。像這樣,在你們兩個線程中:

..... 
mylock = threading.RLock() 

mylock.acquire() 
# do something to template 
mylock.release() 
....