Я пытался бороться с медленным временем чтения с помощью некоторого моста python-java для доступа к базам данных.Я пытаюсь реализовать многопроцессорный способ получения данных.
Я использую модуль multiprocessing
(я не могу заставить pathos
работать с окнами).
Я могу сгенерировать список независимых запросов, которые я хотел бы сделать многопроцессными.
queries = ["SELECT * FROM ... WHERE condition1",
"SELECT * FROM ... WHERE condition2",
... ]
У меня есть объект подключения, который позволяет мне создавать столько курсоров, сколько необходимо (разные курсоры могут работать параллельно):
conn = <connectionObject>
curs1 = conn.cursor()
curs1.execute( queries[0] )
arr1 = curs1.fetchall() # retrieves the data from the query
curs2 = conn.cursor()
curs2.execute( queries[1] )
arr2 = curs2.fetchall()
curs1.close()
curs2.close()
conn.close()
Я пытаюсь создать пул рабочих, которые будут работать над запросами (один запрос = одна задача).Функция, которую я вызываю, должна быть в другом скрипте (чтобы избежать бесконечного цикла в блокноте Jupyter).Основной сценарий выглядит следующим образом:
if __name__ == '__main__':
p = multiprocessing.Pool(processes = multiprocessing.cpu_count() )
for query in queries:
curs = conn.cursor()
output = p.apply(otherScript.retrieveData, args = (query, curs,) )
curs.close()
Функция retrieveData в otherScript.py выглядит следующим образом:
def retrieveData(query, curs):
curs.execute(query)
return curs.fetchall()
И я получаю эту ошибку при применении:
Can't pickle <class 'class that has to do with the cursor database driver'>
Из того, что я понял, pickle не может работать с классами, и ошибки исчезают, когда я убираю курсор из своих аргументов.
Как я могу решить эту проблему?Я не понимаю, зачем нужен pickle (список должен быть выбираемым, даже список объектов, верно?).На самом деле, я не очень понимаю, как это должно работать и как я должен структурировать это, у меня были проблемы с поиском базовых примеров, хотя я читал об этом с прошлой недели.
Среда:
- Python 3.7 через Jupyter Notebook
- Windows 7
- библиотека подключений jaydebeapi (jav-мост JDBC с драйвером java-архивов)