【发布时间】:2017-07-29 07:37:32
【问题描述】:
我正在尝试创建一个发现脚本,它将使用多线程同时 ping 多个 IP 地址。
import ipaddress
import sh
from threading import Thread
from Queue import Queue
user_input = raw_input("")
network = ipaddress.ip_network(unicode(user_input))
def pingit(x):
for i in x.hosts():
try:
sh.ping(i, "-c 1")
print i, "is active"
except sh.ErrorReturnCode_1:
print "no response from", i
queue_to_work = Queue(maxsize=0)
number_of_workers = 30
for i in range(number_of_workers):
workers = Thread(target=pingit(network),args=(queue_to_work,))
workers.getDaemon(True)
workers.start()
当我运行这个脚本时,我得到了 ping 响应,但速度并不快。我相信多线程并没有开始。
谁能告诉我哪里出错了?
非常感谢。
【问题讨论】:
-
看着你的问题,我想知道你为什么要使用多线程来完成这项任务。似乎分布式任务队列(如 Celery)更适合手头的任务。您能否提供更多关于您想要实现的目标的背景信息?
-
@JohanVergeer,我正在尝试发现网络上的活动和非活动 IP 地址。我在
for i in x.hosts(): try: sh.ping(i, "-c 1") print i, "is active" except sh.ErrorReturnCode_1: print "no response from", i下面的第一个脚本但是,这真的很慢。我尝试看一些教程并遇到了多线程。我想如果我使用多线程,我可以一次 ping 30 个 IP 地址。任何帮助或指导将不胜感激。
标签: python multithreading networking