网络编程之多线程

线程理论:

线程是什么?
线程是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())

 



原文地址:https://www.cnblogs.com/TF511/p/9936840.html