Я пытаюсь научиться использовать 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
являются фиктивными, поскольку я просто хотел проверить, как работает многопроцессорная обработка.