Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过';%实现python字符串操作的多线程安全性';_Python_Multithreading_Python Multithreading - Fatal编程技术网

通过';%实现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
声明。事实上,由于
模板
从不更改,因此根本不需要
全局
声明。