【●】多线程编程
一、多线程工作原理
1.多线程任务的工作特点
● 他们本质上就是异步的,需要有多个并发事务。
● 各个事务的运行顺序可以是不确定的,随机的,不可预测的。
● 这样的编程任务可以被分成多个执行流,每个流都有一个要完成的目标。
● 根据应用的不同,这些子任务可能都要计算出一个中间结果,用于合并得到最后的结果。
2.什么是进程
进程就是运行中的程序。
进程在运行过程中独享系统资源 CPU 内存。
多个进程运行时是串行。
3.什么是线程
线程是进程中最小单元。
一个进程里可以包含多个线程。
多个线程同时运行时,共享资源 是并行执行。
二、多线程编程
1.多线程相关模块
●thread和threading模块允许程序员创建和管理线程。
●thread模块提供了基本的线程和锁的支持,而threading提供了更高级别、功能更强的线程管理功能。
[root@dc python]# vim thread.py
import threading # 导入多线程模块
import time
def say_hello():
for x in range(10):
print("勇敢牛牛 不怕困难")
time.sleep(1)
def say_world():
for y in range(10):
print("天王盖地虎 宝塔镇河妖")
time.sleep(1)
t1 = threading.Thread(target=say_hello)
t2 = threading.Thread(target=say_world)
t1.start() # 启动 t1 线程
t2.start()
[root@dc python]# python3 thread.py
执行脚本后可以显示所在网络 在线主机的ip 及不在线主机的ip通过多线程的方式编程。
格式:
192.168.4.21 up
192.168.4.25 down
[root@dc python]# vim ping.py
import subprocess #导入模块
import threading # 导入多线程模块
def ping(host_ip): #定义检测主机是否在线的函数ping
r = subprocess.run('ping -c2 %s &> /dev/null' % host_ip, shell=True)
if r.returncode == 0:
print(host_ip, ': up')
else:
print(host_ip, ': down')
#ping('192.168.4.100') #执行函数时给函数传要检测的ip地址
if __name__ == '__main__':
#以循环的方式将所要检测的ip地址传给函数
for x in range(1, 255):
ipv4 = '192.168.1.%d' % x
ping(ipv4)
#以多线程的方式执行ping()函数
for x in range(1,101):
ipv4 = '192.168.4.%d' % x
# 创建一个线程,执行ping 函数
t = threading.Thread(target=ping, args=(ipv4,))
t.start()
[root@dc python]# python3 ping.py