python方法中的竞争条件

时间:2017-08-07 06:58:53

标签: python

我有一个接一个循环调用的方法

main.py(值是一个对象)

    for value in valueList:               
     value.A()
     value.B()

Object.py(对象定义)

    def A(self):
      self.quantity = 10

    def B(self):
      self.quantity = self.quantity + 1 

在函数B()中我得到一个属性错误,找不到数量,程序正在前进到B(),而不是先完成执行A()

如何确保B()仅在A()完成后执行而不从A()调用B()

我在这里提供两种方法的完整代码:

              def getYesterdayPosition(self,Pos,csvInstruments):
                 for data in csvInstruments:
                   if data['segment'] == "NFO-FUT":
                     if data['tradingsymbol'] == self.derivative:                   
                        for entry in Pos:
                          if self.derivative == entry['tradingsymbol']:
                            quantity = int(entry['quantity'])
                            self.yesterdays_position = quantity/data['lot_size']                    


               def getPositionDiff(self):
                  if self.yesterdays_position == self.indices:
                     self.trade = 0.0
                  elif self.yesterdays_position > self.indices:
                     self.trade = -(self.yesterdays_position - self.indices)
                  elif self.yesterdays_position < self.indices:
                     self.trade = self.yesterdays_position - self.indices

错误来自getPositionDiff(),它说它无法找到yesterdays_position

main.py 这就是它们的名称

              for value in orderList:
               value.getYesterdayPosition(jsonPositions['net'],csvInstruments)
               value.getPositionDiff()  

1 个答案:

答案 0 :(得分:0)

不确定您的代码在做什么。但问题在于getY yesterdayPosition方法

在getY yesterdayPosition内部你有很多条件。其中任何一个都失败了,并且self.yesterdays_position没有被声明。

更好地应用else条件并为False案例设置一些值。