mySQL 最大连接数与 Celery 中的组处理



我们每 15 分钟运行一次由芹菜运行一次任务,该任务更新数据库中的股票价格。大约有 8000 只股票,所以我们使用芹菜分组来并行运行它们。每个任务处理 100 只股票。

    stock_ids = Stock.objects.values_list('id', flat=True)
    stock_chunks = [stock_ids[x:x + 100] for x in xrange(0, len(stock_ids), 100)]
    group(celery_get_update_stock_chunk_snap_quotes.s(stock_chunk) for stock_chunk in stock_chunks)()

我们还使用自动缩放,最小辅助角色 = 2,最大 = 10。我注意到我们偶尔会达到 SQL 最大连接数。我们的 SQL 实例设置为默认值 150 并发。

 File "/usr/local/lib/python2.7/site-packages/MySQLdb/connections.py", line 187, in __init__
super(Connection, self).__init__(*args, **kwargs2)
OperationalError: (1040, 'Too many connections')

为什么当每个任务查询 100 只股票时,我们达到最大连接数限制?我对分组有些不了解。我们如何避免这个问题,简单地提高最大连接数,或降低每个任务的库存?

假设,您的机器有 8 个内核。启动工作线程时,默认情况下它会启动 8 个进程来使用任务。

在您的情况下,每 8 个流程和 100 个库存最多 10 名工作人员将计为 8000。

可以查看并发性并对其进行限制,也可以增加数据库连接或减少每秒查询的股票数。

相关内容

  • 没有找到相关文章

最新更新