每周运行一个Python,将数据从PostgreSQL服务器迁移到Teradata。每次只有一个表,这个脚本:
中的相同表中。
这种情况发生在28个表上,我突然意识到,一次只做一个表是疯狂的。从概念上讲,我是否可以使用多线程来一次在5个表上运行这个过程,当一个表完成时继续运行,这样每次总是有5个表被加载,直到表列表(总共28个表)耗尽为止?我可以认为这是一个严重的游戏改变,但还没有找到任何有用的信息。
发布于 2020-12-09 08:08:32
您可以加快并行读写操作的进程。
精神病学2的ThreadedConnectionPool
参考文献:https://pynative.com/psycopg2-python-postgresql-connection-pooling/
但是为了解决争用条件,访问相同db资源的多线程最好使用下面的方法来解决它。
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来实现您的过程。
https://stackoverflow.com/questions/65208303
复制相似问题