在SQLAlchemy中使用eventlet

5 投票
2 回答
3031 浏览
提问于 2025-04-17 01:20

我正在使用eventlet来构建一个简单的网站爬虫,参考的是这个例子。我想用SQLAlchemy来存储网页的内容和一些元数据,以便后续处理。请问可以把SQLAlchemy和eventlet一起使用吗?有没有人能提供一个简单的例子?

2 个回答

8

OpenStack计算项目(Nova)使用了SQLAlchemy和eventlet,如果你感兴趣的话,可以看看他们的方法

5

抱歉回复晚了。

这主要取决于你使用的数据库连接库。

  • 如果你用的是C扩展库,比如MySQLdb,Eventlet有一个叫做db_pool的模块,像在OpenStack示例中使用的那样。简单来说,它会创建一个操作系统线程池来执行阻塞的数据库操作。所以你不能同时进行很多查询,但大多数情况下,你的数据库也承受不了那么多查询,所以这不是个大问题。
  • 如果你用的是纯Python库,比如myconnpy或pg8000,那你只需要调用eventlet.monkey_patch()就可以了。
  • 作为一个特殊情况,Eventlet支持对psycopg2进行猴子补丁。虽然它是个C扩展,但它非常棒,提供了IO钩子,所以你可以享受到两者的优点。再次,只需简单调用monkey_patch()就能解决问题。

撰写回答