网络编程之多线程
线程理论:
线程是什么?
线程是CPU的基本执行单位 线程里面包括就是要执行的代码
进程是一个资源单位 其中包括了这个程序需要的所有资源
就像是一个工厂 里面包括了生产所需所有资源
线程像一条流水线 包含具体的执行步骤
一个工厂中可以包含多个线程 每个线程可以生产不同的产品
每个进程被启动后 就会自动创建一个线程 该线程会从程序入口开始执行代码(py程序入口就是被执行文件的第一行)
被称之为主线程
如果主线程在完成任务时耗时太长 可以开启子线程来辅助主线程
线程 VS 进程:
线程 和进程的区别
进程是一个资源单位
一个进程可以包含多个线程
多个线程之间数据可以共享
线程开销比进程小
在多线程中CPU的切换速度会非常快 但资源消耗没有进程高
怎样开启线程:
from threading import Thread
import time,os def task(): time.sleep(2) print("子线程 run.....") print(os.getpid()) #查看子线程pid #创建一个子线程 t = Thread(target=task) t.start() #启动子线程 # 主线程等到子线程结束 t.join() print("over") print(os.getpid())
守护线程:
from threading import Thread import time def task(): time.sleep(5) print("子线程...") t = Thread(target=task) t.daemon = True # 守护线程 执行顺序与进程中一样 与进程类似 t.start() print("over")
常用方法:
from threading import Thread,current_thread,active_count,enumerate import time def task(): print("子线程...") time.sleep(1) # 获取当前线程对象 非常常用 print(current_thread()) t = Thread(target=task,name="线程!") # t.daemon = True # 守护线程 执行顺序与进程中一样 print(t.name) print(t)
#启动线程 t.start() # 获取当前活跃线程的数量 print(active_count()) # 返回活跃的线程对象枚举 print(enumerate()) print("over")
启动线程的另一种方式:
from threading import Thread,current_thread class MyThread(Thread): def run(self): #和进程类似 都需指定一个run 函数 print("run 函数执行!") print(current_thread()) mt = MyThread() mt.start() print(current_thread())