2017-05-04 4 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을 사용하여 각 프로세스의 커서를 반복하려고했습니다. 하지만 같은 오류가 있습니다. –