В приведенном ниже примере я пытаюсь добавить много объектов с несколькими потоками, и каждый объект связан с таблицей "someids".
from multiprocessing import Pool
from sqlalchemy.orm import sessionmaker, scoped_session
session_factory = sessionmaker(bind=engine)
Session = scoped_session(session_factory)
def user_adder(user):
session = Session()
session.add(UserInfo(
name=user['name'],
someids_id=session.query(SomeIds).filter_by(some_id = user['some_id']).first()
))
session.commit()
def threading_test(users, n_jobs):
pool = Pool(n_jobs)
results = pool.map(user_adder, users_list)
Работает нормально, но мне нужно session.query (SomeIds) для каждого сеанса, который является неоптимальным в случае многих объектов. Более быстрым способом было бы сделать запрос один раз, а затем сделать понимание списка следующим образом:
someids = session.query(SomeIds).all()
, а затем ...
someids_id=[i for i in someids if i.some_id == user['some_id']][0]
Вопрос в том, как передать someids
список в функцию пула ( user_adder )?