在使用tornado的过程中发现了请求阻塞,用IOLoop.current().set_blocking_log_threshold(0.5)
查看了下,是在如下dict comprehension
处阻塞了
data = [dict({"sid": sid}, **{key: value for key, value in i.iteritems() if key in need_cols}) for i in v_data]
逻辑拆一下,大概如下
data = []
for i in v_data: # v_data是个较大的dict
temp = {key: value for key, value in i.iteritems() if key in need_cols} # 部分key不需要
temp["sid"] = sid # 单独加一个sid
data.append(temp)
请问这里应该如何改成异步的?
改成异步也没多大用处,你这里是计算密集型,你的费时应该在 "key in need_cols", need_cols应该也是一个很大的数组,想办法优化这块就好。
试试改成这样