芹菜上python工人的最佳设置(爬虫+保存数据库)

问题描述 投票:1回答:1

我有多个python工作者,它们会爬网某些网站,解析数据并将它们存储在Postgres数据库中。

我还不清楚如何设计代码来优化服务器资源(在微服务上部署kubernetes上的多个Pod)。假设请求没有速率限制。

出于演示目的,我创建了一个示例代码,该示例代码获取了前10k个网站,并将其存储在数据库中-然后从Bing抓取搜索结果(并存储它们)。可以扩展到1M网站。

Celery正在使用池gevent,因为工作进程具有许多网络I / O。我还为补丁postgres添加了psycogreen,以避免出现瓶颈。为了避免达到Postgres最大连接数,我添加了pgbouncer作为数据库代理。

该代码位于:https://github.com/melalj/celery-worker-demo/

入口是./app/entrypoint.sh./app/worker.py中的主要代码逻辑

关于此实现有3个子问题:

如何调整大小/调整变量?

  • 工人并发
  • SQLAlchemy pool_size(通常由pgbouncer接管)
  • worker_prefetch_multiplier
  • 经纪人池限制
  • python worker的副本数(它将如何影响数据库负载)

如何优化代码?

似乎还有改进代码的空间,如何跟踪瓶颈(我怀疑是db或beautifulsoup,在使用gevent时似乎是一个神秘的谜团-以及如何对其进行优化?

有时数据库意外关闭,为什么?

当我运行代码并触发+ 10K拉动时。工人在几次拉扯后上吊,偶尔摔倒:(psycopg2.OperationalError) server closed the connection unexpectedly关于如何调整数据库资源以支持此类任务的任何建议?

python sqlalchemy celery gevent pgbouncer
1个回答
0
投票

你得出任何结论@melalj吗?

© www.soinside.com 2019 - 2024. All rights reserved.