温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - pinging ~ 100,000 servers, is multithreading or multiprocessing better?
multithreading python python-multiprocessing python-multithreading ping

python - ping〜100,000台服务器,多线程或多处理是否更好?

发布于 2020-04-06 00:15:56

我创建了一个简单的脚本,该脚本遍历需要ping和nslookup的服务器列表。问题是,查验可能需要一些时间,特别是要查验更多的服务器,而不是一天几秒钟。

我刚开始编程,我知道多处理或多线程可能是使我的工作运行更快的解决方案。

我的计划是获取服务器列表,或者1.将其分成大小相等的列表,并与线程/进程匹配的列表数量;或者2.如果这些选项之一支持它,请遍历单个列表,并通过每个列表完成先前的ping和nslookup之后,将服务器名称分配给线程或进程。这样做是可取的,因为这样可以确保我花费最少的时间,就像列表1拥有200个脱机服务器,列表6拥有2000个脱机服务器一样,它需要等待使用列表6的过程完成,即使所有其他服务器都可以免费点。

  1. 哪个胜任这项任务?为什么?

  2. 如果可能,我如何确保每个线程或进程具有基本相同的运行时

即使现在很简单的代码片段

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)

出现此问题是因为ping失败平均平均需要3秒钟以上。我也知道,不放置print语句会使其更快,但是我想监视它的情况很小。我对100,000台服务器的影响进行了ping操作,这需要按常规进行,并且列表会不断增长

查看更多

提问者
AlbinoRhino
被浏览
72
23.3k 2020-01-31 05:33

TLDR;MultiThreading是您的解决方案-线程模块使用线程,多处理模块使用进程。不同之处在于线程在相同的内存空间中运行,而进程具有单独的内存。

至于问题1

对于IO任务,例如查询数据库或加载网页,CPU只是在等待答案而没有做任何事情,这是浪费资源,因此多线程是答案(:

至于问题2-

您只需创建线程池即可管理它们同时运行,而无需费力。