我有以下问题,使用 SQLALchemy 0.7.8、Flask-SQLAlchemy 0.16 和 MySQL 5.5。
我有一个在服务器 A 上运行的 cron 脚本,它查询表 T 以获取与特定状态匹配的所有行的 id,将这些 id 发送到代理,该代理将其分发给许多其他机器上的工作人员。
工作人员获取 id,查询该表 T 和其他一些表的数据,更新表以将该 id 标记为正在处理,提交事务,并通过 REST API 将这些发送到服务器 X。
一旦服务器 X 完成工作,它会将结果发送到另一个服务器 Y 的另一个 REST API 中的回调。服务器 Y 进行一些处理并将结果保存回表 T。提交之后,它将 id 发送给另一个worker,这可能是在第一步得到它的那个人,并且那个worker现在应该获取一些其他数据并发送回另一个服务,但是它不会在这一步做任何更新。
问题是,在最后一步,worker 没有通过回调获取服务器 Y 更新的数据,而是从更新之前获取数据。
我认为工作人员仍然在它用来首先将数据发送到服务器 X 的会话上,并且没有刷新,因为在它与下一次查询数据之间没有发生提交或回滚,当服务器 Y 被回调时。
在这种情况下,适当的解决方案是什么?到目前为止,我尝试在任务开始时调用 session.commit(),在工作人员查询数据之前,它似乎正在工作,但我对此不太确定。