【问题标题】:race condition in python methodspython方法中的竞争条件
【发布时间】:2018-01-14 09:53:20
【问题描述】:

我有 2 个方法一个接一个地循环调用

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() 中,它说找不到昨天的位置

main.py 这就是他们的称呼

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

【问题讨论】:

  • ??? def A() => def A(self)。您的代码不正确,并且任何地方都没有任何比赛......请minimal reproducible example
  • 虽然不应该我不知道为什么,但它却在不断前进
  • 不可能真的发生,一定是另一个问题。你绝对需要提供一个完整的例子。
  • 是整个 object.py 模块吗?如果是,那么您需要将这些函数嵌入到一个类中,并确保 valueList 的元素是该类的实例
  • 它们在一个类中,而 valueList 中的对象是该类的实例

标签: python


【解决方案1】:

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

在 getYesterdayPosition 里面你有很多 if 条件。其中任何一个都失败了,并且 self.yesterdays_position 没有被声明。

最好应用 else 条件并为 False 情况设置一些值。

【讨论】:

    猜你喜欢
    • 2011-03-31
    • 2011-03-09
    • 2018-08-21
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 2016-03-07
    • 2011-07-17
    • 2013-02-27
    相关资源
    最近更新 更多