Невозможно использовать объекты SQLite Row с многопроцессорной библиотекой - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь научиться использовать SQLite и многопроцессорную библиотеку в Python.Может быть, моя проблема очень проста, но я не могу понять, как изменить мою программу, чтобы она работала.

У меня следующий код:

import multiprocessing
import time

from db import get_db

def _getDbData():
    db = get_db()
    rows = db.execute('SELECT * FROM table')

    return rows.fetchall()


def _taskPut(row_tuple, queue, flag):
    for i in range(5):
        queue.put((row_tuple[0], i))
        print(' * inserted values: ', row_tuple[0], i)
        time.sleep(0.75)


def _taskGet(queue):
    while queue.qsize():
        print(queue.get())


def runTasks():
    consoles= _getDbData()

    with multiprocessing.Manager() as process_mgr:
        # Create shared Queue and iterable with function arguments
        events_queue= process_mgr.Queue()
        args= zip( [tuple(i) for i in consoles], [events_queue]*len(consoles), [False]*len(consoles) )

        pool= multiprocessing.Pool()
        pool.map(_taskPut, zip(consoles, args))
        pool.map(_takGet, (events_queue,))
        pool.close()
        pool.join()

Я получаю ошибку: TypeError: can't pickle sqlite3.Row objects.Я не понимаю, почему я получаю эту ошибку, потому что я не пропускаю sqlite3.Row, но tuple.

PS: Извиняюсь, если мой английский не идеален.Я не носитель языка.Также функции _taskPut и _taskGet являются фиктивными, поскольку я просто хотел проверить, как работает многопроцессорная обработка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...