2017-05-04 66 views
0

我想跨多个工人,我的巨大循环,但我有这个错误:sqlite3.ProgrammingError:递归使用游标不允许。虚拟多处理锁

我想我必须应用Lock。我该怎么做?

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

感谢您的回答!但我该如何解决这个问题?我试图做itertools.cycle来迭代每个进程的游标。但我有同样的错误。 –