首页 > 解决方案 > 我们可以在 Scrapy 中使用锁吗?由于 Scrapy 是单线程的,因此它们是否需要?

问题描述

在我的项目管道中添加数据库中的数据,在处理项目期间,与服务器的连接可能会随机断开,我需要重新建立连接。现在在open_connection函数中,我是否需要确保只有一个线程会创建新连接并且所有并发请求都不会开始创建新连接?

scrapy单线程一样,我想在这种情况下我不需要任何锁,因为一个线程将重新建立连接,并且所有下一个传入的process_item函数回调都将建立一个连接。如果这是错误的,我可以使用所有常用的 Python 锁scrapy吗?

标签: pythonpython-3.xscrapy

解决方案


Scrapy 不是单线程的,但你仍然不需要锁。

内部scrapy引擎可以一次向目标服务器发起多个请求,但它维护所有内部线程的顺序/顺序,使其对用户来说似乎是单线程的。

所以是的,您不需要任何锁,因为在任何时候都只允许 1 个线程处理管道。


推荐阅读