通过';%实现python字符串操作的多线程安全性';
我有两个线程可以调用以下函数:通过';%实现python字符串操作的多线程安全性';,python,multithreading,python-multithreading,Python,Multithreading,Python Multithreading,我有两个线程可以调用以下函数: template = 'My name is %s' def sayhi(name): global template print template % name 线程A将按如下方式调用: sayhi('Tom') sayhi('Jerry') 线程B将按如下方式调用: sayhi('Tom') sayhi('Jerry') 我的问题是,全球var“模板”是否安全 非常感谢 由于模板从不更改,因此代码非常好,将按预期工作 (如果模板发生
template = 'My name is %s'
def sayhi(name):
global template
print template % name
线程A将按如下方式调用:
sayhi('Tom')
sayhi('Jerry')
线程B将按如下方式调用:
sayhi('Tom')
sayhi('Jerry')
我的问题是,全球var“模板”是否安全
非常感谢 由于
模板
从不更改,因此代码非常好,将按预期工作
(如果
模板
发生变化,这会使事情变得有些复杂,答案可能是“这取决于您的期望值”。由于模板
从未发生变化,因此代码完全可以正常工作
(如果
模板
可能会发生变化,这会使事情变得有些复杂,答案可能是“这取决于您的期望值”。我认为您担心的是模板
处于关键部分。在更复杂的情况下,如果template
的值将被更改,则必须在更改之前使用锁。这样,在两个线程中:
.....
mylock = threading.RLock()
mylock.acquire()
# do something to template
mylock.release()
....
我认为您担心的是,
模板
处于关键部分。在更复杂的情况下,如果template
的值将被更改,则必须在更改之前使用锁。这样,在两个线程中:
.....
mylock = threading.RLock()
mylock.acquire()
# do something to template
mylock.release()
....
template
是否有变化?@NPE-global-var'template'在运行时不会变化。template
是否有变化?@NPE-global-var'template'在运行时不会变化。事实上,由于template
从不变化,因此根本不需要global
声明。事实上,由于模板
从不更改,因此根本不需要全局
声明。