- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个简单的脚本,它遍历我需要 ping 和 nslookup 的服务器列表。问题是,ping 可能需要一些时间,尤其是 ping 比一天中的秒数更多的服务器。
我对编程相当陌生,我知道多处理或多线程可能是使我的工作运行得更快的解决方案。
我的计划是获取我的服务器列表和 1. 将其分成大小均匀的列表,列表的数量与线程/进程匹配,或者 2. 如果这些选项之一支持它,则遍历单个列表,每个列表都传递一个新的在完成之前的 ping 和 nslookup 后,线程或进程的服务器名称。这是可取的,因为它确保我花费最少的时间,就好像列表 1 有 200 个离线服务器而列表 6 有 2000 个,它需要等待使用列表 6 的过程完成,即使所有其他人在那个时候都是免费的观点。
import subprocess
import time
server_file = open(r"myfilepath", "r")
initial_time = time.time()
for i in range(1000):
print(server_file.readline()[0:-1]+ ' '+str(subprocess.run('ping '+server_file.readline()[0:-1]).returncode)) #This returns a string with the server name, and return code,
print(time.time()-initial_time)
最佳答案
为了获得最佳性能,您既不想要;对于 100,000 个事件作业,最好在单个或可能的少数线程或进程中使用异步处理(但不超过可用内核的数量)。
使用异步 I/O,许多网络任务可以在单个线程中执行,由于节省了上下文切换(也就是说,您理论上可以在 1 秒内 ping 100,000 台机器),轻松实现 100,000 或更高的速率。
Python 通过 asyncio
支持异步 I/O ( here's 一个很好的异步和协程介绍)。
不依赖像 ping
这样的外部进程也很重要。 ,因为产生一个新进程是一个非常昂贵的操作。
aioping
是使用 asyncio
完成的 native Python ping 的示例(请注意,ping 实际上是一对 ICMP 请求/回复数据包)。应该很容易调整它以同时执行多个 ping。
关于python - ping ~ 100,000 个服务器,多线程还是多处理更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59993940/
我是一名优秀的程序员,十分优秀!