我有以下两种模型
class User(db.Model, CreatedAtMixin, ModifiedAtMixin):
__tablename__ = "user"
id = db.Column(db.Integer, primary_key=True)
class Balance(db.Model, ModifiedAtMixin):
__tablename__ = "billing_balance"
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
user = db.relationship("User", backref=backref("balance", uselist=False))
我需要选择一些带有User负载的天平(以最大程度地减少数据库查询的数量),并以非阻塞方式异步处理每个天平。
这是我的做法:
def pmap(fn, iterable, max_workers=20):
def _ensure_arg_is_iterable(arg):
if type(arg) in (list, tuple):
return arg
return (arg,)
futures = []
pool = ThreadPoolExecutor(max_workers=max_workers)
for params in iterable:
futures.append(pool.submit(fn, *_ensure_arg_is_iterable(params)))
return futures
def some_func(balance):
print(balance.user)
def main():
balances = db.session.query(Balance).outerjoin(
User, Balance.user_id == User.id
).filter(
# conditions
).options(
contains_eager(Balance.user)
)
ready_to_process = []
for balance in balances:
some_irrelevant_method(balance)
# print(balance.user)
ready_to_process.append(balance)
pmap(some_func, ready_to_process)
问题是,如打印语句所示,balance.user
在None
中是some_func(balance)
,除非我在balance.user
中显式调用main()
。因此,在没有得到AttributeError的情况下,我无法调用任何方法或在balance.user
中获得some_func
的任何属性。
任何有关如何解决此问题的建议或有关如何解决该问题的建议都将受到赞赏。