Python 怎么多机器执行任务?求推荐框架

2021-04-08 10:02:44 +08:00
 zealinux

现在 Python 脚本跑任务跑在一台机器上,已经跑了一天了,还没跑完。

  1. 从数据库拿处所有的数据(量非常大)
  2. 循环中每条进行处理(这个处理异步请求 api )
  3. 处理后每条再重新更新到数据库中
  4. db commit

感觉应该有办法并行处理

比如: 生产者一次性创建所有的任务( 1 ), 然后创建 N 个消费者(可以部署到多台机器上), 所有任务入 MQ,然后生产者通过 pull 去拿任务去消费

求推荐的框架或者更好的思路?

4030 次点击
所在节点    Python
31 条回复
Jat001
2021-04-08 12:46:17 +08:00
@hanssx n 年前我用 celery 的时候也发现有一堆 bug,不知道是现在好点了还是一堆人跟风,实际没怎么用过,反正当时是真后悔选 celery 了
Selenium39
2021-04-08 12:49:16 +08:00
才用完 celery,一大堆坑,但是功能还是很强大
Jat001
2021-04-08 12:53:01 +08:00
https://github.com/celery/celery/issues/3864
17 年提的 feature request,一直在 milestones 里往后拖,现在已经在 5.2 的 todo list 里了😂
ipwx
2021-04-08 12:56:32 +08:00
这个场景不适合用任何工作队列。因为大部分时间在 IO 上。主线程读进来然后再分派是什么鬼?
----

建议先读进来所有 ID,对 ID 分片,然后在子进程根据 ID 取数据、处理、然后写回去。如果可以,那就直接要求每个子进程读比如“尾部是 XXX” 的 ID 的记录。
nthhdy
2021-04-08 13:14:50 +08:00
一次性的任务,还是重复性的工作?
另外,你预计单机的算力能支持吗?

如果是一次性的任务,并且单机多核算力没问题,上 multiprocessing 就行了,多进程,代码很好写。
如果否,上任务队列吧。你这个需求简单,celery,或者 rq 都可以。
DoctorCat
2021-04-08 13:18:35 +08:00
如果调度策略很基础没复杂的设计,RQ 就行了 https://github.com/rq/rq
SjwNo1
2021-04-08 14:15:04 +08:00
concurrent.futures
tisswb
2021-04-08 16:01:10 +08:00
这种我一般都是 celery,效果,功效都不错
Hconk
2021-04-09 07:07:30 +08:00
cco
2021-04-09 09:39:29 +08:00
pyspark 或许也可以。
sss495088732
2021-04-09 11:30:12 +08:00
kafka+Faust

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

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

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

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

© 2021 V2EX