多线程实例

1>>ping 一个网段的主机

 1 import subprocess
 2 import threading
 3 
 4 
 5 class Ping:
 6     def __init__(self, host):
 7         self.host = host
 8 
 9     def __call__(self):
10 
11         result = subprocess.run('ping -c2 %s &> /dev/null' % self.host, shell=True)
12         if result.returncode == 0:
13             print('%s:up' % self.host)
14         else:
15             print('%s:down' % self.host)
16 
17 
18 
19 if __name__ == "__main__":
20     ips = ['176.130.1.%s' % i for i in range(1,255)]
21     for ip in ips:
22         t = threading.Thread(target=Ping(ip))
23         t.start()

2.多进程实现ping

 1 import os
 2 import subprocess
 3 
 4 def ping(host):
 5     result = subprocess.run('ping -c2 %s &> /dev/null' %host,shell=True)
 6     if result.returncode == 0:
 7         print('%s:up' % host)
 8     else:
 9         print('%s:down' % host)
10 
11 def main():
12     ips = ['176.130.1.%s' % i for i in range(1,255)]
13     for ip in ips:
14         pid = os.fork()
15         if not pid:
16             ping(ip)
17             exit()
18 
19 
20 
21 if __name__ == "__main__":
22     main()


3.多进程实现socket通信 

 1 import socket
 2 from time import strftime
 3 import os
 4 
 5 
 6 class TcpTimeServer(object):
 7     def __init__(self, host='', port=12345):
 8         self.addr = (host, port)
 9         self.serv = socket.socket()
10 
11     def chat(self,cli_sock):
12         while True:
13             data = cli_sock.recv(1024)
14             if data.strip() == b'quit':
15                 break
16             data = data.decode()
17             data = '[%s] %s' %(strftime('%H:%M:%S'),data)
18             cli_sock.send(data.encode())
19         cli_sock.close()
20 
21     def run(self):
22         self.serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
23         self.serv.bind(self.addr)
24         self.serv.listen(1)
25 
26         while True:
27             try:
28                 cli_sock , cli_addr = self.serv.accept()
29             except KeyboardInterrupt:
30                 break
31             pid = os.fork()
32             if not pid:
33                 self.serv.close()   # 子进程不需要服务器套接字,关掉
34                 self.chat(cli_sock)
35                 exit()
36             cli_sock.close()        # 父进程不与客户及通信,关闭客户机套接字
37 
38             while True:
39                 result = os.waitpid(-1,1)[0]
40                 if result == 0:     # 不是僵尸进程,则终端循环
41                     break
42 
43         self.serv.close()
44 
45 
46 if __name__ == "__main__":
47     tcpserv = TcpTimeServer()
48     tcpserv.run()

4.多线程实现socket通讯

 1 import socket
 2 from time import strftime
 3 import threading
 4 
 5 class TcpTimeServer(object):
 6     def __init__(self, host='', port=12345):
 7         self.addr = (host, port)
 8         self.serv = socket.socket()
 9 
10     def chat(self,cli_sock):
11         while True:
12             data = cli_sock.recv(1024)
13             if data.strip() == b'quit':
14                 break
15             data = data.decode()
16             data = '[%s] %s' %(strftime('%H:%M:%S'),data)
17             cli_sock.send(data.encode())
18         cli_sock.close()
19 
20     def run(self):
21         self.serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
22         self.serv.bind(self.addr)
23         self.serv.listen(1)
24 
25         while True:
26             try:
27                 cli_sock , cli_addr = self.serv.accept()
28             except KeyboardInterrupt:
29                 break
30             t = threading.Thread(target=self.chat, args=(cli_sock,))
31             t.start()
32 
33         self.serv.close()
34 
35 
36 if __name__ == "__main__":
37     tcpserv = TcpTimeServer()
38     tcpserv.run()
原文地址:https://www.cnblogs.com/ray-mmss/p/10579303.html