python多线程包_python多线程学习笔记

一.多线程相关python包/模块

1.thread

该模块有问题,使用不便,在python3中被保留,并且改成了_thread

2.threading

python3中通用的多线程包

二.什么是多线程

案例1:

无多线程程序代码

1 importtime2

3 defloop1():4 print('loop1 begining:',time.ctime())5 time.sleep(4)6 print('loop1 ending:',time.ctime())7

8 defloop2():9 print('loop2 begining:',time.ctime())10 time.sleep(2)11 print('loop2 ending:',time.ctime())12

13 defmain():14 print('main beginging',time.ctime())15 loop1()16 loop2()17 print('main ending',time.ctime())18

19 if __name__ == '__main__':20 main()

main beginging Wed Aug 22 21:33:34 2018loop1 begining: Wed Aug22 21:33:34 2018loop1 ending: Wed Aug22 21:33:38 2018loop2 begining: Wed Aug22 21:33:38 2018loop2 ending: Wed Aug22 21:33:40 2018main ending Wed Aug22 21:33:40 2018

out1

案例2:

含有多线程程序代码1

1 importtime2 import_thread as thread3

4 defloop1():5 print('loop1 begining:',time.ctime())6 time.sleep(4)7 print('loop1 ending:',time.ctime())8

9 defloop2():10 print('loop2 begining:',time.ctime())11 time.sleep(2)12 print('loop2 ending:',time.ctime())13

14 defmain():15 print('main beginging:',time.ctime())16 thread.start_new_thread(loop1,())17 thread.start_new_thread(loop2,())18 print('main ending:',time.ctime())19

20 if __name__ == '__main__':21 main()

main beginging: Wed Aug 22 21:35:07 2018main ending: Wed Aug22 21:35:07 2018

out2

启动多线程函数:start_new_thead

参数两个,一个是需要运行的函数名,第二是函数的参数作为元祖使用,为空则使用空元祖

注意:如果函数只有一个参数,需要参数后由一个逗号

案例中,main函数执行完,程序立刻退出.loop1,loop2并没有执行完

main函数相当于包工头

loop1,loop2相当于工人

main函数(包工头)分配loop1,loop2(工人)任务之后,立刻报告给boss,没有等loop1,loop2完成各自的任务

案例3:

含有多线程程序代码2-改进版

1 importtime2 import_thread as thread3

4 defloop1():5 print('loop1 begining:',time.ctime())6 time.sleep(4)7 print('loop1 ending:',time.ctime())8

9 defloop2():10 print('loop2 begining:',time.ctime())11 time.sleep(2)12 print('loop2 ending:',time.ctime())13

14 defmain():15 print('main beginging:',time.ctime())16 thread.start_new_thread(loop1,())17 thread.start_new_thread(loop2,())18 print('main ending:',time.ctime())19

20 if __name__ == '__main__':21 main()22 whileTrue:23 time.sleep(1)

main beginging: Wed Aug 22 21:45:10 2018main ending: Wed Aug22 21:45:10 2018loop1 begining: Wed Aug22 21:45:10 2018loop2 begining: Wed Aug22 21:45:10 2018loop2 ending: Wed Aug22 21:45:12 2018loop1 ending: Wed Aug22 21:45:14 2018

out3

在改进案例中:

增加while True: // time.sleep()

while True:无限循环

这样就避免了程序在main函数执行完后立刻退出,使得loop1,loop2得以执行

案例4:

含有多线程程序代码3-带参数

1 from time importctime,sleep2 import_thread as thread3

4 defloop1(x):5 print('loop1 begining:',ctime())6 sleep(4)7 print('LOOP1:I am {0}'.format(x))8 print('loop1 ending:',ctime())9

10 defloop2(x,y):11 print('loop2 begining:',ctime())12 sleep(2)13 print('LOOP2:I am {0}\nLOOP2:I am {1}'.format(x,y))14 print('loop2 ending:',ctime())15

16 defmain():17 print('main begining:',ctime())18 thread.start_new_thread(loop1,('Jone',))19 thread.start_new_thread(loop2,('Tom','king'))20 print('main ending:',ctime())21

22 if __name__ == '__main__':23 main()24 whileTrue:25 sleep(1)

三.threading模块的使用

案例1:

1 importtime2 importthreading3

4 defloop1(x):5 print('loop1 start:',time.ctime())6 print('LOOP1:I am',x)7 time.sleep(4)8 print('loop1 end:',time.ctime())9

10 defloop2(x,y):11 print('loop2 start:',time.ctime())12 print('LOOP2:I am',x)13 print('LOOP2:I am',y)14 time.sleep(2)15 print('loop2 end:',time.ctime())16

17 defmain():18 print('main start:',time.ctime())19 t1 = threading.Thread(target = loop1,args = ('JONE',))20 t2 = threading.Thread(target = loop2,args = ('KIMI','SUKI'))21 t1.start()22 t2.start()23 print('main end:',time.ctime())24 if __name__ == '__main__':25 main()

main start: Wed Aug 22 23:41:38 2018loop1 st

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值