一个线程只属于一个进程
一个进程可以有多个线程
在进程内部,如果要干多个事情,就需要运行多个子任务,这些子任务叫线程,线程共享所属进程地内存空间
模块:
1,_thrad模块 低级模块
2,threading模块 高级模块,对低级模块进行封装
普通实例
import threading,time
def run(num):
print('子线程(%s)开始'%(threading.current_thread().name))
time.sleep(2)
print('打印',num)
time.sleep(2)
print('子线程(%s)结束'%(threading.current_thread().name))
if __name__=='__main__':
print('主线程(%s)开始'%(threading.current_thread().name))
t=threading.Thread(target=run,name='runthread',args=(1,))
#target为这个主线程要执行地函数名字
#args为要传入的函数参数
#用t这个变量接收线程
t.start()#运行线程
t.join()#等待线程结束
print('主线程(%s)结束'%(threading.current_thread().name))
#主线程结束
实例2:如果两个案例同时对数据修改,会使得数据混乱
num=0
def run(n):
global num #把num声明成全局变量
for i in range(1000000):
num=num+n #对参数修改
num=num_n
if __name__=='__main__':
#定义一个主入口:赋值,判断是否修改
t1=threading.Thread(target=run,args=(6,))
t2=threading.Thread(target=run,args=(9,))
#创建两个线程
t1.start()
t2.start()
t1.join()
t2.join()
print(num)
# 解决方法,加锁
lock=threading.Lock()#定义一个锁
num=0
def run(n):
global num #把num声明成全局变量
for i in range(1000000):
with lock: #自动上锁,解锁
num=num+n #对参数修改
num=num_n
if __name__=='__main__':
#定义一个主入口:赋值,判断是否修改
t1=threading.Thread(target=run,args=(6,))
t2=threading.Thread(target=run,args=(9,))
#创建两个线程
t1.start()
t2.start()
t1.join()
t2.join()
print(num)
案例四:一起过马路
bar=threading.Barrier(3)
#够三个人才走
def run():
print('%s--start'%(threading.current_thread().name))
time.sleep(1)
bar.wait()#这就是在等人
print('%s--end'%(threading.current_thread().name))
if __name__=='__main__':
for i in range(5):
threading.Thread(target=run).start()
定时线程
def run():
print('********')
t=thread.Timer(5,run)
t.start()
t.join()
print('end')
来源:CSDN
作者:weixin_43960465
链接:https://blog.csdn.net/weixin_43960465/article/details/104746261