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

2020-12-22 16:27:53 +08:00
 LiebeLee

刚接手了一个公司内部用的项目,用的是 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'

感谢!

2696 次点击
所在节点    Python
11 条回复
knightdf
2020-12-22 16:44:04 +08:00
直接丢给 celery 做不行么?
maocat
2020-12-22 16:59:40 +08:00
rpc ?
LiebeLee
2020-12-22 17:22:24 +08:00
@knightdf 之前没接触过,项目里也没有这个,我们想尽量少引入新的模块或者组件依赖,不过也可以去了解一下,多谢!
LiebeLee
2020-12-22 17:24:40 +08:00
@maocat 啥意思?这个本身应该也算 rpc,只是分派任务的 worker 需要知道总共有多少个 worker 在做分析任务(包括不是这次分派出去的),要约束总的跑分析任务的 worker 个数,避免阻塞其他业务。
julyclyde
2020-12-22 19:49:32 +08:00
建议把 web 和实际处理分离开
iConnect
2020-12-23 00:11:12 +08:00
单独启动一个应用去处理数据,除非你的数据是和 web 上下文绑定,否则没必要混在一起搞。
SjwNo1
2020-12-24 09:47:49 +08:00
分析数据实时性邀请高吗,不高的话异步或者交给 crontab
SjwNo1
2020-12-24 09:48:34 +08:00
@SjwNo1 邀请高吗 --> 要求高吗
frankchen
2020-12-24 10:01:50 +08:00
用 celery~
0bit
2020-12-25 07:05:08 +08:00
推进试试 RQ ( https://python-rq.org/ ),比 Celery 要简单。
这种场景下没必要自己折腾多进程通信什么的,引入一个简单的库,用 task queue,比什么都香。
0bit
2020-12-25 07:05:27 +08:00
推进 -> 推荐

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/737926

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX