【发布时间】:2017-12-25 03:55:14
【问题描述】:
这里是代码。 计划是 ping 范围内的所有主机并恢复 fqdn...这是有效的,但需要很长时间...所以考虑多处理...但无法使其正常工作。代码只是挂在 p.map(...) 并没有超出。 有人可以帮忙吗?......希望代码是可读的..
import subprocess
import os
import socket
import multiprocessing
from multiprocessing.dummy import Pool as ThreadPool
from datetime import datetime
range_85 = "10.85.40"
range_87 = "10.87.40"
print ("starting")
replyfile = open("pingdns_replies.txt", "a")
#replyfile.write("START %s \n" % datetime.now())
print("file opened")
def ping(host):
print ("entered function")
#for ip in range (50,250):
#host = range_85 +"."+ str(ip)
print (host)
rep = subprocess.call("ping %s" % host, shell=False)
if rep == 0:
try:
dns = socket.getfqdn(host)
except:
dns = " "
print ("%s at %s is up" % (dns, host))
replyfile.write(" %s at %s is up \n" % (dns, host))
else:
try:
dns = socket.getfqdn(host)
print("%s at %s is down ?" % (dns, host))
replyfile.write(" %s at %s is down ? \n" % (dns,host))
except:
dns = " "
print ("%s received no reply" % host)
replyfile.write(" %s received no reply \n" % (dns, host))
#ips = (range_85 + "." + str(i) for i in range(0,255))
ips = []
for i in range(1,255):
ips.append(range_85+'.'+str(i))
print ("ips created")
print (ips)
with multiprocessing.Pool(2) as p:
p.map(ping, ips)
replyfile.write("END %s \n" % datetime.now())
replyfile.close()
【问题讨论】:
-
请编辑您的代码以使其可读。
-
如果您将
ping作为子进程调用,则不需要多处理;您已经在使用多个进程。 -
@Daniel....ping 整个范围需要一个小时....有没有办法通过产生多个进程来处理它来使其更快?...只是引入多处理在那一点上挂起,甚至没有到达 def ping(host)
标签: python multithreading