Я хочу эффективно выполнить sql на task
. Но я не знаю как! В настоящее время я вызываю немую функцию из task
, которая создает соединение с with snowflake.connector.connect(some_creds_here) as con:
, создает соединение для каждого запроса .
Я попытался отправить объект механизма на task
но у него был тот же ответ. Я создал эту базовую c структуру из большого модуля для отладки.
def get_connection():
engine = create_engine(
'snowflake://{user}:{password}@{account}/'.format(
user="user",
password="password",
account="us-east-1",
)
)
try:
connection = engine.connect()
return connection, engine
finally:
pass
def task(con):
con = con.connect()
print(con.execute('select current_version()').fetchone())
def main():
connection, engine = get_connection()
iterable = [(engine) for x in range(10)]
with Pool() as p:
for _ in p.imap_unordered(task, iterable):
...
con.close()
engine.dispose()
if __name__ == "__main__":
main()
Вот ответ об ошибке:
Traceback (most recent call last):
File "service\ECR\file_conversion_worker\mock.py", line 26, in main
for _ in p.imap_unordered(task, iterable):
File "\AppData\Continuum\lib\multiprocessing\pool.py", line 748, in next
raise value
File "\AppData\Continuum\lib\multiprocessing\pool.py", line 431, in _handle_tasks
put(task)
File "\AppData\Continuum\lib\multiprocessing\connection.py", line 206, in send
self._send_bytes(_ForkingPickler.dumps(obj))
File "\AppData\Continuum\lib\multiprocessing\reduction.py", line 51, in dumps
cls(buf, protocol).dump(obj)
TypeError: can't pickle _thread._local objects
Редактировать: исправленный пул потоков в многопроцессорный пул