记一次多进程数据库连接问题
番茄鸡蛋少点蛋
发布于 云南 2020-09-30 · 1.2w浏览 3赞

最近遇到个问题,原来有个爬虫,在爬站点的时候巨慢, 因为他们的站点应该没有缓存策略(但是他们不给数据接口,直接说让爬他们的站点), 导致爬虫抓快了就容易把他们的站点抓挂掉,所以就在抓取的时候限了速,入库的地方是同步的。

但是现在我发现他们的站点加了缓存策略, 所以可以稍微加快点爬虫的频率,现在的瓶颈反而是在入库了。为了加快爬取速度,想改造一下爬虫,想到最简单的办法就是用多进程来爬取数据入库。

在用多进程的时候就出问题了, 爬虫没问题, 但是 入库的出问题了。入库这里用的是 SQLAlchemy 来连接数据库, 用ORM的话可以减少一些出错的概率。在改造的过程中发现, 因为入库是同步的,所以在开启多进程以后当子进程退出,那么全局的数据库连接就会被关闭,然后另外一个子进程就会出现丢失数据库连接的情况。

然后经过各种搜索,找到一段神奇的代码, 说实话我也怎么没看懂, 但是原理应该是在多个进程的数据库连接中获取起始数据库连接进程的pid,然后共享出来,每个进程都共用这个数据库连接。
下面帖代码:

番茄鸡蛋少点蛋
这人不懒,什么都没留下~
浏览 1.2w
3
相关推荐
最新评论
赞过的人 3
评论加载中...

暂无评论,快来评论吧!