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()方法基本上是使用不上了.
来源:CSDN
作者:Monster123$
链接:https://blog.csdn.net/weixin_45154559/article/details/104621452