虚拟多处理锁

时间:2017-05-04 18:11:51

标签: python sqlite python-multiprocessing

我正在尝试为多个工作者分配我的巨大for循环,但是我遇到了这个错误:sqlite3.ProgrammingError:不允许递归使用游标。

我想我必须申请锁。我该怎么做?

import multiprocessing.dummy as multiprocessing

con = sqlite3.connect('db.db', check_same_thread=False)
cur = con.cursor()

def paramlist():
        for row in nodes.itertuples():
            l = []
            for row2 in ref_stops.itertuples():
                l.append((row[1], row[2], row[3], row2[1],
                         row2[2], row2[3], row2[4], haversine(row[3], row[2], row2[3], row2[2])))
            yield l

def func(params):
    # nodes_ref_stop = pd.DataFrame(params)
    cur.executemany('INSERT INTO stocks VALUES (?,?,?,?,?,?,?,?)', params)
    con.commit()

pool = multiprocessing.Pool()
pool.map(func, paramlist())

1 个答案:

答案 0 :(得分:1)

您无法在不同的线程或进程之间共享游标。每个进程都必须使用自己的游标。