0

我正在尝试使用 gRPC 在 python 上构建一个网络爬虫。我已经在服务器文件中包含了用于抓取的功能,并使用客户端向用户请求 URL 列表并将其发送到服务器以进行抓取部分。每个网址大约需要 25-30 秒才能被抓取。因此,我想使用多处理来加速该过程,即并行使用 N 个内核从 N 个 URL 中提取信息。我该如何进行?比如说,我有 4 个内核:是否可以在 4 个不同的内核上实现客户端对服务器的 4 次调用?还是应该在每个核心上分别创建一个服务器-客户端对?或者我可以创建 4 个具有不同通道端口的服务器实例并在 4 个内核上执行它们吗?

我对这一切都很陌生。所以,我可以在这方面使用任何形式的帮助。

4

1 回答 1

0

简单的分析器是您可以使用相同的端口启动四个 gRPC 服务器进程。gRPC 的 tcp 端口默认开启SO_REUSEPORT套接字选项,这意味着所有进入共享端口的流量都会负载均衡到所有监听进程。通过这种方式,gRPC 服务器能够在不受 GIL 约束的情况下利用所有计算能力。

如果您更喜欢在一个进程中运行服务器,我建议您使用该multiprocessing库 ( doc )。

至于gRPC客户端,负载不是那么高,你可以threading用来实现并行,也可以multiprocessing用来利用更多的CPU。

于 2019-01-23T20:14:58.880 回答