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
youngce
V2EX  ›  Python

Python 的 tcp 服务器解算数据后,数据入库的正确方式是什么?

  •  
  •   youngce · 2019-09-06 16:26:48 +08:00 · 2354 次点击
    这是一个创建于 1903 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前项目中有一个 python 编写的 TCP 服务器,需要接收到客户端数据后进行解码、分析,对分析的结果(比如客户端已经离线的消息)写入数据库。

    所以是要在写数据库的时候直接另起一个线程进行操作吗?或者有没有其他的更好的方式?

    8 条回复    2019-09-08 05:25:25 +08:00
    Yourshell
        1
    Yourshell  
       2019-09-06 16:29:38 +08:00
    异步
    lbp0200
        2
    lbp0200  
       2019-09-06 16:34:08 +08:00
    python threadpool
    youngce
        3
    youngce  
    OP
       2019-09-06 16:35:30 +08:00   ❤️ 1
    @Yourshell #1 所以 tcp 服务器算完数据,直接甩 rabbitmq,然后另外一个线程再来消费,写入数据库是不是也是以一个不错的办法?
    toono
        4
    toono  
       2019-09-06 16:45:49 +08:00
    @youngce 我认为你说的是不错的做法,虽然说引入了 rabbitmq,但是对于执行进度和结果都可以按需监控到。如果直接用 threadpool 的话就需要自己设计如何保证任务执行的可靠性,对于人力成本来说还是存在的。
    youngce
        5
    youngce  
    OP
       2019-09-06 17:39:00 +08:00
    @toono #4 是的,目前我就是这几个方案了,坐等大佬来给我建议了
    hspeed18
        6
    hspeed18  
       2019-09-06 18:59:43 +08:00   ❤️ 1
    量不大的话同步写也不是不可以
    lolizeppelin
        7
    lolizeppelin  
       2019-09-07 02:42:04 +08:00
    一般来说 要分数据收发线程和数据处理线程

    收发线程接收到完整的自定义协议包后,讲数据塞队列里,然后继续收数据

    数据处理线程从队列里取数据然后进行处理
    wd
        8
    wd  
       2019-09-08 05:25:25 +08:00 via iPhone
    看你处理数据的时候是不是要 block 其他请求吧……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2998 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:19 · PVG 22:19 · LAX 06:19 · JFK 09:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.