【问题标题】:Multi-threading safety for python string operation via '%'通过 '%' 实现 python 字符串操作的多线程安全
【发布时间】:2014-07-21 05:56:51
【问题描述】:

我有两个线程可以调用下面的函数:

template = 'My name is %s'

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

线程 A 将调用如下:

sayhi('Tom')

线程 B 将调用如下:

sayhi('Jerry')

我的问题是 global var 'template' 是否安全。

非常感谢!

【问题讨论】:

  • template 有变化吗?
  • @NPE global var 'template' 在运行时不会改变。

标签: python multithreading python-multithreading


【解决方案1】:

由于template 永远不会更改,因此代码非常好,可以按预期工作。

(如果template 可能会发生变化,这会使事情变得有些复杂,答案将是“这取决于您的期望”。)

【讨论】:

  • 事实上,由于template 永远不会改变,所以根本不需要global 声明。
【解决方案2】:

我认为您担心template 处于临界区。在更复杂的情况下,如果template 的值将被更改,那么您必须在更改之前使用锁。像这样,在你们两个线程中:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 2016-08-10
    • 2013-08-19
    • 2019-04-05
    相关资源
    最近更新 更多