python 2.7中有async for的等价表达方式吗?

发布于 2022-09-04 09:59:11 字数 558 浏览 16 评论 0

在使用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)

请问这里应该如何改成异步的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

£噩梦荏苒 2022-09-11 09:59:11

改成异步也没多大用处,你这里是计算密集型,你的费时应该在 "key in need_cols", need_cols应该也是一个很大的数组,想办法优化这块就好。
试试改成这样

ind = set(i.keys()) & set(need_cols)
temp = {d: i[d] for d in ind}
凹づ凸ル 2022-09-11 09:59:11

自问自答

改成生成器就好了

def data_generator(*args):
    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
        yield temp
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文