在python中更改线程中的全局变量

2024-09-30 03:22:57 发布

您现在位置:Python中文网/ 问答频道 /正文

test_var="TEST"

class exLogging(logging.Logger):
  cmdidDict[threading.currentThread()]="default"
  def __init__(self, name):
    logging.Logger.__init__(self, name)
    cmdidDict[threading.currentThread()]="default"
    return
  def setCmdId(self, newCmdId): #threadsafe sync
    for k,v in cmdidDict.items():
      cmdidDict[threading.currentThread()]=newCmdId
      test_var=newCmdId
      obj=ContextFilter(test_var)          #ContextFilter is another class
      self.addFilter(obj)
      self.info("in setcmdid")

我希望类中的setCmdId函数是线程安全的,因为这个函数将从不同的线程单独调用。我所说的threadsafe是指我希望setCmdId函数在每个不同的线程中设置不同的CMDID值,一旦线程超过CMDID,它就应该获得它的全局值。 CMDID和cmdidDict[]是全局变量。 问题是CMDID值持续存在。谁能给我指出正确的方向吗??在


Tags: 函数testselfdefaultvarlogginglogger线程
1条回答
网友
1楼 · 发布于 2024-09-30 03:22:57

看看这个答案:https://stackoverflow.com/a/4542436/1542000

确保线程安全的唯一可靠方法是在函数内部使用某种锁定机制:

lock = threading.Lock()
lock.acquire()
...
lock.release()

这样就不会有两个线程同时访问字典,从而消除争用条件。在

很难判断setCmdId函数中发生了什么,特别是因为for循环似乎只不过是重复命令len(cmdidDict.items())次。如果我们更清楚地知道您要实现的目标,我们可能会想出一个更好的解决方案,而不仅仅是给函数加锁。在

相关问题 更多 >

    热门问题