Python 如何使多连接数据加载原子化?

Python 如何使多连接数据加载原子化?,python,connection-pooling,python-2.6,atomicity,amazon-redshift,Python,Connection Pooling,Python 2.6,Atomicity,Amazon Redshift,我正在用Python编写一个奇特的应用程序,它将一组数据从S3加载到一个红移集群中。如果需要,应用程序针对多个表发出一组DDL,然后通过几个COPY语句将数据加载到这些表中 为了使整个过程尽可能快地运行,我使用了后端口,并将DDL和load活动并行地分布在多个连接上 它似乎工作得很好。现在我想让整个过程原子化 正在做的工作非常简单。不存在死锁的可能性,因为任何给定的表都将被更改,然后只加载一次。此外,在加载期间锁定资源也是可以的。最后,我对所有我感兴趣的活动进行红移。所以理论上,我想做的应该是可

我正在用Python编写一个奇特的应用程序,它将一组数据从S3加载到一个红移集群中。如果需要,应用程序针对多个表发出一组DDL,然后通过几个
COPY
语句将数据加载到这些表中

为了使整个过程尽可能快地运行,我使用了后端口,并将DDL和load活动并行地分布在多个连接上

它似乎工作得很好。现在我想让整个过程原子化

正在做的工作非常简单。不存在死锁的可能性,因为任何给定的表都将被更改,然后只加载一次。此外,在加载期间锁定资源也是可以的。最后,我对所有我感兴趣的活动进行红移。所以理论上,我想做的应该是可能的

现在我看到的选项是:

  • 以某种方式实现了
    ThreadedConnectionPool.commitall()
    ThreadedConnectionPool.rollbackall()的犹太区等价物。(不幸的是,这些方法并不存在。)
  • 看看ZODB的,对我来说,这看起来太过分了
  • 滚动我自己的方式回滚部分负载
  • 放弃多线程方法,在单个连接上完成所有操作

  • 有没有比这更好的方法我错过了?这些选项看起来都不太好。

    您可以使用两阶段提交协议执行您想要的操作

    …如果服务器支持它,我对此表示怀疑