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

「求助」gunicorn+flask 如何实现多进程同步?

  •  
  •   LiebeLee · 2020-12-22 16:27:53 +08:00 via iPhone · 2660 次点击
    这是一个创建于 1430 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚接手了一个公司内部用的项目,用的是 gunicorn+Flask 写的一个 web 服务。 由于执行的有部分业务是分析数据,耗时较长,所以想将该流程拆分,将分析任务拆分成小粒度的流程,自己请求自己,将任务分派给其他 worker 。 但是因为要控制执行分析任务的个数,避免占用太多资源,想用共享变量进行同步,而 gunicorn 框架的多进程是在其框架代码内部 fork 的,不清楚该如何实现进程间同步,请各位指点~ 文件结构 :

    |--app |-- init.py |-- module1 |-- module2 |-- gun.conf

    app/init.py from flask import Flask app = Flask(name)

    使用 gunicorn -c gun.conf app:app 的方式启动 gun.conf 指定 worker_class = 'gevent'

    感谢!

    11 条回复    2020-12-25 07:05:27 +08:00
    knightdf
        1
    knightdf  
       2020-12-22 16:44:04 +08:00
    直接丢给 celery 做不行么?
    maocat
        2
    maocat  
       2020-12-22 16:59:40 +08:00
    rpc ?
    LiebeLee
        3
    LiebeLee  
    OP
       2020-12-22 17:22:24 +08:00 via iPhone
    @knightdf 之前没接触过,项目里也没有这个,我们想尽量少引入新的模块或者组件依赖,不过也可以去了解一下,多谢!
    LiebeLee
        4
    LiebeLee  
    OP
       2020-12-22 17:24:40 +08:00 via iPhone
    @maocat 啥意思?这个本身应该也算 rpc,只是分派任务的 worker 需要知道总共有多少个 worker 在做分析任务(包括不是这次分派出去的),要约束总的跑分析任务的 worker 个数,避免阻塞其他业务。
    julyclyde
        5
    julyclyde  
       2020-12-22 19:49:32 +08:00
    建议把 web 和实际处理分离开
    iConnect
        6
    iConnect  
       2020-12-23 00:11:12 +08:00 via Android
    单独启动一个应用去处理数据,除非你的数据是和 web 上下文绑定,否则没必要混在一起搞。
    SjwNo1
        7
    SjwNo1  
       2020-12-24 09:47:49 +08:00
    分析数据实时性邀请高吗,不高的话异步或者交给 crontab
    SjwNo1
        8
    SjwNo1  
       2020-12-24 09:48:34 +08:00
    @SjwNo1 邀请高吗 --> 要求高吗
    frankchen
        9
    frankchen  
       2020-12-24 10:01:50 +08:00
    用 celery~
    0bit
        10
    0bit  
       2020-12-25 07:05:08 +08:00
    推进试试 RQ ( https://python-rq.org/ ),比 Celery 要简单。
    这种场景下没必要自己折腾多进程通信什么的,引入一个简单的库,用 task queue,比什么都香。
    0bit
        11
    0bit  
       2020-12-25 07:05:27 +08:00   ❤️ 1
    推进 -> 推荐
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1015 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:48 · PVG 03:48 · LAX 11:48 · JFK 14:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.