Skip to content

一个基于Celery的异步/分布式代理存储/验证器

License

Notifications You must be signed in to change notification settings

arrti/proxypooler

Repository files navigation

ProxyPooler: 一个基于Celery的异步/分布式代理存储/验证器

Build Status

传入代理和它的验证周期,proxypooler会将其存储并在代理验证周期到来时验证代理的有效性,直到失效时才将其移除。不同的代理可以配置不同的验证周期。 Celery使用Eventlet实现并发。
本项目可以作为其他项目的一个模块使用,也可以作为一个独立的服务通过websocket进行通信。
可以通过自定义后台存储、序列化/反序列化函数、定期执行的函数(作为Celery的任务)等来周期性地处理你存入的其他类型数据。

模块功能描述

  • pooler.py

    • validator代理验证器:从存储(默认是redis)中取出到期的代理,将其发送给celery进行验证;
    • server服务器:通过websocket协议接收代理,可能是新的代理,也可能是通过验证的代理。服务器的地址和端口由配置文件中的local_*来指定。支持SSL。
    • ProxyPooler类:核心类,实现了上述验证器和服务器,同时提供了类似于下面的websocket的接口,可用于存储或获取代理,具体见模块注释。
  • celery服务

    • task_validator.py:代理有效性验证任务,通过验证的代理会发送到rabbitmq的proxypooler_validator_queue队列(exchange为proxypooler_validator_exchange)中等待后续处理;
    • task_logger.py:日志任务,所有的日志信息都通过该任务来输出到终端或文件。
  • sender.py
    从rabbitmq的proxypooler_validator_queue队列读取通过验证的代理,使用websocket协议将其发送到配置文件中remote_*指定的地址和端口处(默认等于local_*)。

注意: 接收到的新代理不会立即验证,而是会等到下一个验证周期(验证周期 + 收到代理的时间)才进行验证。

使用

pooler模块的命令行參數

  • -v: 仅启动代理验证器,会将验证任务发送给celery执行;
  • -s: 仅启动服务器,通过webocket接收代理。

不带任何参数则同时启动验证器和服务器,2个参数都有则只启动验证器。

配置

项目的配置在proypooler.yaml中;celery的配置在celery_config.py中;logger的配置在logging.yaml中。 默认会在环境变量PROXYPOOLER_CONFIG指定的目录或/etc/proxypooler目录下寻找proypooler.yamllogging.yaml文件。 按需修改相应的参数即可。

启动

首先设置环境变量PROXYPOOLER_CONFIGproxypooler/proxypooler目录或将2个*.yaml配置文件拷贝到/etc/proxypooler目录下。然后按顺序在3个终端中执行执行:
(1) 启动celery服务
下面的命令会启动300个协程来并发执行任务(验证和日志任务)

celery -A proxypooler worker -P eventlet -c 300

(2) 启动pooler

python run_pooler.py

(3) 启动sender

python run_sender.py

推荐使用supervisord来管理上面3个进程,supervisord的配置文件在supervisor目录下,使用前务必修改相应的参数。

websocket api

  • 数据格式
    使用ext.py模块中的serial函数将形如[(代理1, 验证周期秒数), (代理2, 验证周期秒数), ...]序列化后得到的二进制数据。deserial是对应的反序列化函数(默认使用MessagePack)。
  • 命令格式
    • get:获取1个最新验证过的代理;
    • get N:获取 N 个最新验证过的代理。
      上述命令皆为文本字符串。

测试

下面2种方法任选其一即可。

tox

使用tox进行集成测试。
首先安装tox

pip install tox

然后在proxypooler目录下执行tox命令,通过测试则说明一切正常。

pytest

首先安装pytest

pip install pytest

然后在proxypooler目录下执行pytest tests --runsrv命令,通过测试则说明一切正常。

About

一个基于Celery的异步/分布式代理存储/验证器

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages