Python多进程Pool.map需求:仅获取函数返回的有效数据
解决方案
首先修正你的task函数里的变量名笔误(否则逻辑不成立):
from contextlib import suppress def task(datetime): with suppress(Exception): offen_bool = IEX.open_at_time(offen_IEX, str(datetime), only_rth=True) if offen_bool: # 原代码误写为open_bool,会导致逻辑错误 return offen_bool # 无有效结果时默认返回None
然后在主进程中,直接过滤掉结果列表里的无效值即可,这是最适合新手的简单方案:
if __name__ == '__main__': df = getTable() with Pool(10) as pool: print("pool Start") # 注意:原代码用了enumerate(df["Time"]),会把(索引, 时间)传给task,若不需要索引,直接传df["Time"]即可 # 若确实需要索引,需把task的参数改为(idx, datetime) data = pool.map(task, df["Time"]) # 过滤掉None、False这类无效结果 valid_data = [item for item in data if item] # 最终的valid_data就是仅包含有效返回值的列表 print(valid_data)
如果你的task可能返回0、空字符串这类你不想过滤的假值,只想排除None,可以把过滤条件改成if item is not None。
内容的提问来源于stack exchange,提问作者logn
相关产品推荐
相关产品推荐

