请求数百万个 URL, C#还是 Python 快且容易实现?

2022 年 4 月 5 日
 rv54ntjwfm3ug8

场景是从一个 URL 获取数百万个任务(每次最多获取 1 万条任务,可自定义数量,但不能从中间开始获取,且每 2 秒只能请求一次任务列表),每个任务中的 URL 分别请求(访问每个 URL 需要 0.1~30+ 秒,目标网站没有并发限制),解析出需要的数据后上报需要的数据和任务 ID 到同一 URL (一次可以上报多个任务的结果)。因为不可能同时发几百万个请求,所以应该要用到线程池,设置最高同时多少任务在运行。请问这种场景的最佳实践是什么,C#还是 Python (我比较熟悉这两门语言)速度快且容易实现?

6415 次点击
所在节点    程序员
39 条回复
Dockerfile
2022 年 4 月 5 日
@ly841000 肯定是 python 方便,就发网络请求调什么 c 库,没麻烦找麻烦么
ly841000
2022 年 4 月 5 日
@Jwyt 说得 c#没我网络库似的。。。。
J55s5
2022 年 4 月 5 日
大部分的业务场景,语言都不是瓶颈
iyaozhen
2022 年 4 月 5 日
都行,不是瓶颈。Python 性能差不是在 IO 上差
Dockerfile
2022 年 4 月 5 日
@ly841000 你自己说的 c 库啊。。
fanxiao
2022 年 4 月 5 日
c# async await 模式,挺适合这种 IO 密集型任务
WaldenHorizon
2022 年 4 月 5 日
语言不重要,协程模型是关键,最适合这件事的我觉得是 go
westoy
2022 年 4 月 5 日
@Richard14

爬虫其实不需要多进程的,python 的 GIL 本来就不锁 IO, lxml 之类的配套基本也会释放 GIL 锁的......
em70
2022 年 4 月 5 日
哪个你写代码快用哪个
Yunen
2022 年 4 月 5 日
首选 golang
ClericPy
2022 年 4 月 5 日
Python 请求几百万不是大量级, 带宽足够的情况下, aiohttp + uvloop 大约一小时以内就能搞定(之前爬 fb 380 万页请求开个多核加协程 50 分钟就抓完了), 如果是线程的话并发高了切换开销太大真不如协程, 性能损耗太大了. C# 不了解, 不过也算协程友好的, 熟悉哪个用哪个吧
IvanLi127
2022 年 4 月 5 日
我选 C#。
ration
2022 年 4 月 6 日
爬虫 python 的库多
ElmerZhang
2022 年 4 月 6 日
我可能会选择写一段 shell
Ackvincent
2022 年 4 月 6 日
这不就是 python 的活嘛
bthulu
2022 年 4 月 6 日
要个屁的线程池啊, 单线程高宽带就行了. 把你这数百万个任务写到一个文件里, 然后直接下载这个文件就好了
rv54ntjwfm3ug8
2022 年 4 月 6 日
@bthulu #36 有的 URL 不到 0.1 秒就请求完了,有的 URL 要等 10 分钟超时,显然爬的不可能是我的网站,有几个万个不同的网站
bthulu
2022 年 4 月 6 日
@theklf4 那就走异步, C#的异步 httpclient 很好用
beyondex
2022 年 4 月 6 日
当然是 C# 在并发、任务调度这块,官方、三方都用很好用的库

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/844961

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX