ошибка с многопроцессорным анализом данных в sqlite - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь разобрать несколько ссылок и добавить проанализированные данные в sqlite3. Я получаю ошибки, что база данных sqlite3 заблокирована, так что, возможно, это из-за того, что я использую слишком большое значение пула? Я попытался снизить его до 5, но я все еще получаю ошибки, показанные ниже.

Мой код выглядит примерно так:

from multiprocessing import Pool

with Pool(5) as p:
    p.map(parse_link, links)

Мой реальный код выглядит так:

with Pool(5) as p:
    p.map(Get_FT_OU, file_to_set('links.txt'))
    # Where Get_FT_OU(link) appends links to a sqlite3 database.

Когда код запускается, я часто получаю эти ошибки. Может кто-нибудь помочь мне это исправить?

    multiprocessing.pool.RemoteTraceback: 
"""
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/multiprocessing/pool.py", line 119, in worker
    result = (True, func(*args, **kwds))
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/multiprocessing/pool.py", line 44, in mapstar
    return list(map(*args))
  File "/Users/christian/Documents/GitHub/odds/CP_Parser.py", line 166, in Get_FT_OU
    cursor.execute(sql_str)
sqlite3.OperationalError: database is locked
"""

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/christian/Documents/GitHub/odds/CP_Parser.py", line 206, in <module>
    p.map(Get_FT_OU, file_to_set('links.txt'))
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/multiprocessing/pool.py", line 266, in map
    return self._map_async(func, iterable, mapstar, chunksize).get()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/multiprocessing/pool.py", line 644, in get
    raise self._value
sqlite3.OperationalError: database is locked
>>> 

Я могу нормально выполнить код, не используя многопроцессорность, и даже при использовании Pool (2) я не получаю никаких ошибок, но если я поднимусь выше, я получу эти ошибки. Я использую новейший MacBook Air.

1 Ответ

0 голосов
/ 04 июля 2018

Каким-то образом это работает, добавив тайм-аут = 10 к соединению

conn = sqlite3.connect(DB_FILENAME, timeout=10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...