我正在尝试学习如何在Python中使用SQLite和多处理库。也许我的问题很简单,但是我不知道如何更改程序才能使其正常运行。
我有以下代码:
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
也是伪函数,因为我只是想测试多处理的工作原理。