我第一次尝试使用多处理,代码如下:
def fuzzy_match(blg_matches, op_matches):
update_dicts = []
with concurrent.futures.ProcessPoolExecutor() as executor:
scored_matches = [
executor.submit(run_matching, blg_match, repeat(op_matches))
for blg_match in blg_matches
]
for match in concurrent.futures.as_completed(scored_matches):
update_dicts.append(match)
return update_dicts
然而,它只是挂着,什么也不做。
为了进行测试,我将run_matching
功能简化为:
def run_matching(blg_match, op_matches):
return 2
它仍然挂着。
blg_matches
和op_matches
都是SQLAlchemyQuery对象。
你知道我哪里错了吗?
所以这里有两个问题。
- 我使用Windows,您需要确保您的多处理代码在
if __name__ == "__main__":
中 - 多处理似乎不喜欢SQLAlchemy查询对象。当我用列表替换查询时,一切都很好