2015-07-01 3 views
0

Этот скрипт python делает некоторые данные в списке продуктов, поступающих из таблицы sqlite ... закомментированный цикл цикла работает так, как ожидалось, но цикл Multiprocessing не работает вообще ... я вижу процессуальность увольняется, но сценарий просто останавливается. любая помощь ?sqlite query с многопроцессорной обработкой

import sqlite3 as lite 
import sys 
import pandas as pd 
import datetime 
from datetime import date 
import time 
from Levenshtein import * 
import multiprocessing as mp 
import copy 

    def getProducts(): 
     con = None 
     try: 
      con = lite.connect('pm.db', check_same_thread=False) 
      con.row_factory = lite.Row 
      cur = con.cursor() 
      cur.execute("SELECT * FROM products") 
      rows = cur.fetchall() 

     except lite.Error, e: 
      print "Error %s:" % e.args[0] 
      sys.exit(1) 

     finally: 
      if con: 
       con.close() 
     return rows 

    def test_mp(row): 
     print row 

    dictArray = [] 
    counter = 0 

    rows = getProducts() 
    #for row in rows: 
     #counter += 1 
     #print 'product {count} from {max}'.format(count=counter, max=len(rows)) 
     #dictArray.extend(test_mp(row)) 

    pool = mp.Pool(10) 
    for ret in pool.imap(test_mp, rows): 
     print 'Done processing product' 
     dictArray.extend(ret) 

    pool.terminate() 
+0

Почему downvote? – Hakim

ответ

0

Это, как я установил его .. по-видимому, массив sqliteRows rows не играет хорошо внутри функций pool.imap ... я использовал другую строку завод, чтобы создать общий Dict.

def dict_factory(cursor, row): 
    d = {} 
    for idx, col in enumerate(cursor.description): 
     d[col[0]] = row[idx] 
    return d 

в getProducts:

 con.row_factory = dict_factory 

кредиты идут на How can I get dict from sqlite query?

Смежные вопросы