【发布时间】:2012-09-12 20:25:59
【问题描述】:
我有一个扭曲的守护进程,它可以解析一些 xml 提要。
我通过 twisted.enterprise.adbapi 将数据存储在 PostgreSQL 中,IIRC 正在包装 psycopg2
我在将数据存储到数据库时遇到了一些问题——重复数据会定期进入数据库。
说实话,我的实现存在一些潜在问题,应该重做并设计得更好。不过我没有时间和资源来做这件事——所以我们现在处于“保持运行”模式。
我认为问题可能来自我对 deferToThread 的使用或我在开始时生成服务器的方式。
作为我认为有问题的功能的快速概述:
Twisted 在 Postgres 中查询应该被分析的账户,并在它们上设置一个块
SELECT
id
FROM
xml_sources
WHERE
timestamp_last_process < ( CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '4 HOUR' )
AND
is_processing_block IS NULL ;
lock_ids = [ i['id'] for i in results ]
UPDATE xml_sources SET is_processing_block = True WHERE id IN %(lock_ids)s
我认为正在发生的事情是(意外地)运行多个服务器或各种其他问题导致多个线程处理这些数据。
我认为如果我将此快速部分包含在独占表锁中,这可能会得到解决 - 或至少排除为问题。
不过,我以前从来没有通过 twisted 完成表锁定。谁能指出我正确的方向?
【问题讨论】:
标签: python postgresql twisted