用于高容量网页搜寻的Python线程与Gevent

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

我正在尝试决定是否应该使用gevent或threading在python中实现Web抓取的并发性。

我的程序应该能够支持大量(~1000)个并发工作者。大多数时候,工人们都在等待回来的请求。

一些指导性问题:线程和greenlet之间究竟有什么区别?我应该在一个进程中创建的最大线程数\ greenlets是多少(关于服务器的规范)?

python multithreading concurrency python-multithreading gevent
1个回答
0
投票

我不认为你已经考虑过这一切。我已经完成了一些使用Gevent框架创建的Greenlets的轻量级线程应用程序。只要您允许控制在具有适当睡眠或切换的Greenlets之间切换 - 一切都可以正常工作。建议等待或阻止超时,等待或阻止超时,提高和除外,然后再睡眠(除了部分代码)然后再循环 - 否则你不会轻易切换Greenlets。

此外,注意加入和/或杀死所有Greenlets,因为你最终可能会导致僵尸,导致你不想要的丰富效果。

但是,我不建议将此用于您的应用程序。而是使用Gevent的以下Websockets扩展之一...请参阅此链接

Websockets in Flask

和这个链接

https://www.shanelynn.ie/asynchronous-updates-to-a-webpage-with-flask-and-socket-io/

我用Flask-SocketIO实现了一个非常好的应用程序

https://flask-socketio.readthedocs.io/en/latest/

它与Docker容器中的Nginx很好地一起穿过Gunicorn。 SocketIO在客户端与Javascript非常接口。

(小心网页抓取 - 使用Scrapy这样的东西,并启用适当的道德刮擦)

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