相关疑难解决方法(0)

创建数据库连接并维护多个进程(多处理)

与我发布的另一篇文章类似,这回复了帖子并创建了一个新问题.

回顾:我需要更新空间数据库中的每条记录,其中我有一个覆盖多边形数据集的点数据集.对于每个点要素,我想指定一个键,使其与其所在的面要素相关联.因此,如果我的观点'纽约市'位于多边形美国,而美国多边形'GID = 1',我将为我的点纽约市分配'gid_fkey = 1'.

好的,所以这已经通过多处理实现了.我注意到使用它的速度提高了150%所以它确实有效.但我认为有一堆不必要的开销,因为每条记录需要一个数据库连接.

所以这是代码:

import multiprocessing, time, psycopg2

class Consumer(multiprocessing.Process):

    def __init__(self, task_queue, result_queue):
        multiprocessing.Process.__init__(self)
        self.task_queue = task_queue
        self.result_queue = result_queue

    def run(self):
        proc_name = self.name
        while True:
            next_task = self.task_queue.get()
            if next_task is None:
                print 'Tasks Complete'
                self.task_queue.task_done()
                break            
            answer = next_task()
            self.task_queue.task_done()
            self.result_queue.put(answer)
        return


class Task(object):
    def __init__(self, a):
        self.a = a

    def __call__(self):        
        pyConn = psycopg2.connect("dbname='geobase_1' host = 'localhost'")
        pyConn.set_isolation_level(0)
        pyCursor1 = pyConn.cursor()

        procQuery = 'UPDATE city SET gid_fkey = gid FROM country …
Run Code Online (Sandbox Code Playgroud)

python database-connection multiprocessing

21
推荐指数
1
解决办法
1万
查看次数

多处理脚本比普通脚本慢

我似乎无法绕过多处理.我试图做一些基本的操作,但多处理脚本似乎需要永远.

import multiprocessing, time, psycopg2

class Consumer(multiprocessing.Process):

    def __init__(self, task_queue, result_queue):
        multiprocessing.Process.__init__(self)
        self.task_queue = task_queue
        self.result_queue = result_queue

    def run(self):
        proc_name = self.name
        while True:
            next_task = self.task_queue.get()
            if next_task is None:
                print ('Tasks Complete')
                self.task_queue.task_done()
                break            
            answer = next_task()
            self.task_queue.task_done()
            self.result_queue.put(answer)
        return

class Task(object):
    def __init__(self, a):
        self.a = a

    def __call__(self):
        #Some more work will go in here but for now just return the value
        return self.a

    def __str__(self):
        return 'ARC'
    def run(self):
        print ('IN')


if __name__ == …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

1
推荐指数
2
解决办法
154
查看次数