我有一个在守护进程中的线程,它循环执行以下查询:
try:
newsletter = self.session.query(models.Newsletter).\
filter(models.Newsletter.status == 'PROCESSING').\
limit(1).one()
except sa.orm.exc.NoResultFound:
self.logger.debug('No PROCESSING newsletters found. Sleeping...')
self.sleep()
return
# (...) more code to do with found newsletter
在IT技术中,sleep方法仅仅是停止当前线程的执行,等待预设时间后返回到主循环。但是我发现,如果我在守护进程运行时将任何简报的状态更改为“处理中”,则什么也不会发生,即查询仍然会引发NoResultFound异常。但是如果我重新启动守护进程,它将找到简报。因此,我认为这个查询的结果必须被缓存了。那么我应该怎么做才能使缓存失效呢?session.expire_all()并不能解决问题。我也可以在每次迭代时创建新的Session()对象,但不知道这样做是否会影响系统资源。