Я очень отчаянный, потому что я пробовал все, что мог, чтобы он работал, но не удался ... Я создал пул, который обрабатывает некоторые текстовые строки, а затем вставляет их в базу данных , Проблема в том, что он ничего не вставляет в таблицу.Не могу ВСТАВИТЬСЯ в базу данных Sqlite3
Я знаю, что, вероятно, это связано с тем, что несколько рабочих пытаются изменить базу данных, но я уже много чего пытался избежать.
Например этого (это метод для вставки URL в таблицу индекса):
def insert_into_index(self, url):
self.lock.acquire()
self.cur.execute('INSERT INTO index VALUES(?)', (url,))
self.conn.commit()
self.lock.release()
Или это (каждое новое применение метода имеет его собственный курсор):
def insert_into_index(self, url):
cur = self.conn.cursor()
cur.execute('INSERT INTO index VALUES(?)', (url,))
self.conn.commit()
фрагмент кода, где я создаю бассейн:
""" CREATE A POOL """
pool = Pool(50)
for category in categories[1:2]:
task = pool.apply_async(index, args=(category.strip('\n'),))
task.get()
pool.close()
pool.join()
""" POOL END """
Index() представляет собой метод, который создает экземпляр класса leaf(text)
, которые делают некоторые вещи с текстом, получают список strings
и пытаются загрузить insert
в базу данных.
class leaf():
def __init__(self, url):
self.url = url
self.results = self.get_all_hrefs(url)
self.dbm = database_file.manager()
for res in self.results:
self.dbm.insert_into_index(res)
Но у меня нет ничего в табличном указателе. Я пробовал все, что знал, без успеха. Не могли бы вы дать мне совет?
EDIT: Это ошибка, которая возникает, когда я добавляю task.get()
в цикл.
line 86, in execute
task.get()
File "C:\Python27\lib\multiprocessing\pool.py", line 567, in get
raise self._value
sqlite3.OperationalError: near "index": syntax error
Но я вещь, что она не говорит ничего, потому что синтаксис совершенно такой же, как в другом методе, который называется последовательно и работает.
'task = pool.apply_async (index, args = (category.strip ('\ n'),))' должно быть что-то после '', ''? – Busturdust