首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多线程将数据加载到SQL表中?

多线程将数据加载到SQL表中?
EN

Stack Overflow用户
提问于 2020-12-08 23:11:58
回答 1查看 149关注 0票数 0

每周运行一个Python,将数据从PostgreSQL服务器迁移到Teradata。每次只有一个表,这个脚本:

  1. DROP/创建表的Teradata版本,
  2. 从PostgreSQL提取新数据,
  3. 将表数据的副本保存在网络驱动器中(出于业务原因),
  4. 将从PostgreSQL下载的数据添加到Teradata.

中的相同表中。

这种情况发生在28个表上,我突然意识到,一次只做一个表是疯狂的。从概念上讲,我是否可以使用多线程来一次在5个表上运行这个过程,当一个表完成时继续运行,这样每次总是有5个表被加载,直到表列表(总共28个表)耗尽为止?我可以认为这是一个严重的游戏改变,但还没有找到任何有用的信息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-09 08:08:32

您可以加快并行读写操作的进程。

精神病学2的ThreadedConnectionPool

参考文献:https://pynative.com/psycopg2-python-postgresql-connection-pooling/

但是为了解决争用条件,访问相同db资源的多线程最好使用下面的方法来解决它。

代码语言:javascript
运行
复制
from psycopg2.pool import ThreadedConnectionPool
from threading import Semaphore

class ReallyThreadedConnectionPool(ThreadedConnectionPool):
    def __init__(self, minconn, maxconn, *args, **kwargs):
        self._semaphore = Semaphore(maxconn)
        super().__init__(minconn, maxconn, *args, **kwargs)

    def getconn(self, *args, **kwargs):
        self._semaphore.acquire()
        return super().getconn(*args, **kwargs)

    def putconn(self, *args, **kwargs):
        super().putconn(*args, **kwargs)
        self._semaphore.release()

现在使用ReallyThreadedConnectionPool类函数和python的Multitreading来实现您的过程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65208303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档