V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Te11UA
V2EX  ›  Python

请问各种框架下 REST 接口断开链接应该如何取消任务?

  •  
  •   Te11UA · 2020-03-21 18:05:48 +08:00 · 1918 次点击
    这是一个创建于 1702 天前的主题,其中的信息可能已经有所发展或是发生改变。

    该接口是 CPU 计算型任务,是异步到 Redis 给别的程序处理的,现在的问题是如果多次发请求马上断开链接的的话,会造成 redis 队列有很多任务,造成后方请求阻塞。现在的问题是不知道如何监听客户端主动断开链接。 Flask 和 Django 没找到相关的函数,tornado 重写了 on_connection_close 木有用啊……

    9 条回复    2020-03-22 00:19:13 +08:00
    mooyo
        1
    mooyo  
       2020-03-21 18:12:53 +08:00
    前端写个任务 ID,后端根据 ID 决定是否重放,这样能解决么。
    mooyo
        2
    mooyo  
       2020-03-21 18:14:29 +08:00
    为啥你的前端会多次发起请求并马上断开链接呢
    Te11UA
        3
    Te11UA  
    OP
       2020-03-21 18:23:07 +08:00
    @mooyo 就是接口容易被恶意请求,或者无意间重发多次,会给后端带来巨大压力。现在是想知道如何断开链接后删除任务呢
    loading
        4
    loading  
       2020-03-21 18:24:24 +08:00 via Android
    无意间?前端没去抖吗?
    xcstream
        5
    xcstream  
       2020-03-21 19:00:12 +08:00
    用 websocket 做 可以判断断开
    mooyo
        6
    mooyo  
       2020-03-21 19:03:39 +08:00
    你用 HTTP,检测断开后删除,确定不会影响普通用户么。。上 WS 吧。。
    hantsy
        7
    hantsy  
       2020-03-21 19:06:02 +08:00
    用 WebSocket
    d5
        8
    d5  
       2020-03-21 19:45:18 +08:00
    个人觉得 restful 接口本来就是无状态的,何来断开一说呢。
    简单一点可以设置各种限制,包括单个用户一小段时间同时执行的任务数量
    用 WebSocket 是可以的
    009694
        9
    009694  
       2020-03-22 00:19:13 +08:00
    不上 ws 的话 就每隔一段时间发一个心跳请求 超过几倍的心跳时间无情求的话就注销排队的任务
    另外在任务提交到排队之前 应该先使用独立的 redis 缓存做任务去重
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5479 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:45 · PVG 13:45 · LAX 21:45 · JFK 00:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.