线程的启动和终止

拥有回忆 提交于 2020-03-08 20:03:34

python中的进程和线程

进程:资源的容器,会启动一个解释器进程,里面跑你的程序,多线程共享同一个解释器进程
线程:干活的
python的线程开发
使用标准库threading
在这里插入图片描述
我们来敲一个小demo来测试一下什么是多线程编程

import threading
import time

def worker():
    count = 0
    while True:
        print("I am working")
        count +=1
        if count>10:
            break
t = threading.Thread(target=worker) # 创建新的线程
t.start()
print("====fin====")

返回结果
在这里插入图片描述
我们来对比一下以下代码

import threading
import time

def worker():
    count = 0
    while True:
        print("I am working")
        count +=1
        if count>10:
            break
t = threading.Thread(target=worker) # 创建新的线程

if __name__ == "__main__":
    print( "====fin====" )
    t.start()

返回结果
在这里插入图片描述
通过=fin=打印的位置,可以得到,当主线程打印完成后开启一个新的线程执行打印语句,主线程等待新的线程打印完成后,主线程消亡.
python的线程没有优先级,没有线程组概念,也不能被销毁、停止、挂起,那也没有回复终断了.
所以python的线程方法你就记start()方法就可以了,其他的基本上就是没了.

线程运行的函数如何传入参数

代码示例

import threading
import time

def add(x,y):
    print(x+y)
    return x+y

t = threading.Thread(target=add,args=(4,5)) # 创建新的线程
t1 = threading.Thread(target=add,args=(4,),kwargs={"y":7})
t2 = threading.Thread(target=add,kwargs={"x":4,"y":6})
if __name__ == "__main__":
    print( "====fin====" )
    # 每一次调用都互不干扰,因为每一个线程都有自己独立的栈
    t.start()
    t1.start()
    t2.start()

线程传参和函数传参没什么区别,本质上就是函数传参.

threading的属性和方法

在这里插入图片描述

import threading
import time

def add(x,y):
    print(x+y)
    getthreadinfo()
    return x+y
def getthreadinfo():
    print(threading.current_thread())  # 当前线程
    print(threading.main_thread())  # 主线程
    print(threading.active_count()) # 处于存活线程个数
    print(threading.enumerate())   # 枚举存活线程生成列表
    print(threading.get_ident())  # 获取当前线程ID

t = threading.Thread(target=add,args=(4,5)) # 创建新的线程
t1 = threading.Thread(target=add,args=(4,),kwargs={"y":7})
t2 = threading.Thread(target=add,kwargs={"x":4,"y":6})
if __name__ == "__main__":
    getthreadinfo()

运行返回
在这里插入图片描述
在这里插入图片描述
最后讲一下start()方法和run()方法的区别
start()方法是在启动一个新的线程后,在新的线程上调用run()方法.而run()就是一个在主线程上运行的普通的函数调用.所以我们只需要记住一个start()方法就行了,而run()方法基本上是使用不上了.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!