tualização de banco de dados paralela de maneira quase total usando Python (PostGIS / PostgreSQ

Preciso atualizar todos os registros em um banco de dados espacial no qual tenho um conjunto de dados de pontos que se sobrepõem ao conjunto de dados de polígonos. Para cada recurso de ponto, desejo atribuir uma chave para relacioná-lo ao recurso de polígono em que ele se encontra. Portanto, se o meu ponto 'New York City' estiver dentro do polígono EUA e para o polígono EUA 'GID = 1' atribuirei 'gid_fkey = 1' ao meu ponto New York City.

Para fazer isso, criei a seguinte consult

procQuery = 'UPDATE city SET gid_fkey = gid FROM country  WHERE ST_within((SELECT the_geom FROM city WHERE wp_id = %s), country.the_geom) AND city_id = %s' % (cityID, cityID)

No momento, estou obtendo as informações de cityID de outra consulta que apenas seleciona todos os cityID em que gid_fkey é NULL. Basicamente, só preciso fazer um loop entre eles e executar a consulta mostrada anteriormente. Como a consulta depende apenas de informações estáticas na outra tabela, em teoria, todos esses processos podem ser executados ao mesmo tempo. Eu implementei o procedimento de segmentação abaixo, mas não consigo fazer a migração para o multiprocessamento

import psycopg2, pprint, threading, time, Queue

queue = Queue.Queue()
pyConn = psycopg2.connect("dbname='geobase_1' host='localhost'")
pyConn.set_isolation_level(0)
pyCursor1 = pyConn.cursor()

getGID = 'SELECT cityID FROM city'
pyCursor1.execute(getGID)
gidList = pyCursor1.fetchall()

class threadClass(threading.Thread):

def __init__(self, queue):
        threading.Thread.__init__(self)
        self.queue = queue

def run(self):

        while True:
            gid = self.queue.get()

            procQuery = 'UPDATE city SET gid_fkey = gid FROM country  WHERE ST_within((SELECT the_geom FROM city WHERE wp_id = %s), country.the_geom) AND city_id = %s' % (cityID, cityID)

            pyCursor2 = pyConn.cursor()                         
            pyCursor2.execute(procQuery)

            print gid[0]                    
            print 'Done'

def main():

    for i in range(4):
        t = threadClass(queue)
        t.setDaemon(True)
        t.start()

        for gid in gidList:
            queue.put(gid)

    queue.join()

main()

Não tenho certeza se o multithreading é ideal, mas é definitivamente mais rápido do que passar um por u

A máquina que utilizarei possui quatro núcleos (Quad Core) e um sistema operacional Linux mínimo, sem GUI, PostgreSQL, PostGIS e Python, se isso faz diferenç

O que preciso alterar para ativar esta tarefa de multiprocessamento fáci