我正在dask bag上运行一个函数,以将数据转储到NoSQL DB中,例如:
def write_to_db(x):
# code to write into db
db.insert_many(x)
return
def func():
# code to process each element
for col in int_cols:
try:
x[col] = int(x[col])
except (ValueError, TypeError):
x[col] = None
import dask.bag as db
bag = db.read_text(...)
bag = bag.map_partitions(csv.DictReader).map(func).map_partitions(write_to_db)
bag.compute()
现在,当我看一下任务列表时,在每个分区完成write_to_db函数之后,它显示为memory
而不是released
。
我的问题:
released
,即蓝色。func()
版本GIL
是否存在?反正有优化这种计算的方法吗?答案 0 :(得分:1)
None
值作为结果保存在内存中,但是这些值很小,我不会担心。您的compute()
的输出将是一组None
的集合(实际上,为了使购物袋更合理,您可能希望将其列为列表)dask.delayed
的版本的行数可能大致相同。