0

我一直在使用 Flask、SQLAlchemy 和 Marshmallow 使用 Python 开发基于 REST 的 Web 应用程序,并连接到 Postgres 数据库。与烧瓶应用程序并行,我运行多个工作线程来实时分析数据。这些线程应该可以访问烧瓶使用的相同对象。为了访问数据库中的数据,我为每个表提供了一个服务。其中一项服务是 TokenPriceService,它从数据库读取和写入代币价格。

def addTokenPrice(self, tokenId, price):
      
    tokenPrice = TokenPriceModel(tokenId, price)
    db.session.add(tokenPrice)
    db.session.commit()
    return self.getTokenPrice(tokenPrice.id)


def getTokenPrice(self, id):
    return TokenPriceModel.query.get(id)

我的 TokenPriceModel 看起来像这样:

class TokenPriceModel(db.Model):

   id = db.Column(db.Integer, primary_key=True)
   tokenId = db.Column(db.Integer, db.ForeignKey('token_model.id'), nullable=False)
   price = db.Column(db.String(100), nullable=False)
   timestamp = db.Column(db.DateTime, nullable=False)


   def __init__(self, tokenId, price):
       self.tokenId = tokenId
       self.price = price
       self.timestamp = datetime.now()


class TokenPriceModelSchema(ma.Schema):
    class Meta:
        fields = ('id', 'tokenId', 'price', 'timestamp')
        
tokenPriceModelSchema = TokenPriceModelSchema()
tokenPriceModelsSchema = TokenPriceModelSchema(many=True)

这是问题所在:

一个线程定期(每 10 秒)更新代币价格。这行得通,我可以在数据库中看到更新的数据。但是当我尝试使用来自另一个线程的相同 TokenPriceService 访问相同的数据(它会做买卖决定)时,价格永远不会更新,并且始终保持与我启动应用程序时相同的值。(所以它只在程序启动时更新一次)。

所以我的问题是:

  • Marshmallow 线程安全吗?
  • 有没有更好的方法来解决我的问题?
4

0 回答 0