python3的并行操作-多进程和多线程ping测试主机状态

##########################
(1)多进程的ping
多个子进程的方式并行操作
os.fork():生成子进程
父进程负责fork子进程。
子进程负责做具体的工作,工作结束后退出。

fork_ping.py

import subprocess
import os

def ping(host):
    retval = subprocess.run(    #将函数的返回值存储到变量中
         ping -c1 %s &> /dev/null  % host,
        shell=True
    )
    if retval.returncode == 0:  #returncode的值为subprocess.run()返回值,0表明成功
        print( %s:up  % host)
    else:
        print( %s:down  % host)

if  __name__ ==  __main__ :
    ips = ( 192.168.2.%s  % i for i in range(1,255))
    for ip in ips:  
        retval = os.fork() #开启254个子进程同时进行ping
        ping(ip)
        exit()  #子进程必须要通过 exit() 退出子进程,否则for循环会在子进程中开启子进程。

(2)多线程
1个进程中多个线程的方式并行操作

threading.Thread():生成多线程
线程负责做具体的工作,工作结束后自动退出。

Thread_ping.py

import subprocess
import  threading

def ping(host):
    retval = subprocess.run(    #将函数的返回值存储到变量中
         ping -c1 %s &> /dev/null  % host,
        shell=True
    )
    if retval.returncode == 0:  #returncode的值为subprocess.run()返回值,0表明成功
        print( %s:up  % host)
    else:
        print( %s:down  % host)

if  __name__ ==  __main__ :
    ips = ( 192.168.2.%s  % i for i in range(1,255))
    for ip in ips:  
        t = threading.Thread(target=ping, args=(ip,)) #开启254个线程同时进行ping
        #注意:将ping函数赋值给target,ping函数的变量通过元组传递给args,args传给函数,(ip,)表明一个元组
       
        t.start() #线程会自动退出,t.start()相当于执行target(*args),相当于执行ping(*args)

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...