博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python学习笔记23:多线程
阅读量:7239 次
发布时间:2019-06-29

本文共 2442 字,大约阅读时间需要 8 分钟。

import time import threading loop = [4, 2] class ThreadFunc:     def __init__(self, name):         self.name = name     def loop(self, nloop, nsec):         #nloop:loop函数的名称         #nsec:系统休眠时间         print('Start loop', nloop, 'at', time.ctime())         sleep(nsec)         print('Done loop', nloop, 'at', time.ctime()) def main():     print("starting at:", time.ctime())     #ThreadFunc('loop').loop 跟一下两个式子相等     #t = ThreadFunc('loop')     #t.loop     #以下t1, t2的定义方式相等     t = ThreadFunc('loop')     t1 = threading.Thread(target = t.loop, args = ('Loop1', 4))     t2 = threading.Thread(target = ThreadFunc('loop').loop, args = ('Loop2', 2))     t1.start()     t2.start()     t1.join()     t2.join()     print('all done at:', time.ctime()) if __name__ == '__main__':     main()

threading的使用:

-直接利用threading.Thread生成Thread实例
1.t = threading.Thread(target = xxx, args = (xxx,))
2.t.start(): 启动多线程
3.t.join():等待多线程执行完成
守护线程:
-如果在程序中将子线程设置为守护线程,则子线程会在主线程结束的时候自动退出
-一般认为,守护线程不重要或者不允许离开主线程独立运行
线程常用属性:
-threading.currentThread: 返回当前线程变量
-threading.enumerate: 返回一个包含正在运行的线程的list,正在运行的线程指的是线程启动后,结束前的
-threading。activeCount:返回正在运行的线程数量,效果跟len(threading.enumerate)相同
-thr.setName: 给线程设置名字
-thr.getName:得到线程的名字
共享变量:当多个线程同时访问一个变量的时候,会产生共享变量的问题

 

import threading sum = 0 loopSum = 100000 def myAdd():     global sum, loopSum     for i in range(1, loopSum):         sum += 1 def myMinu():     global sum, loopSum     for i in range(1, loopSum):         sum -= 1 if __name__ == '__main__':     print('start.....{0}'.format(sum))     t1 = threading.Thread(target = myAdd, args = ())     t2 = threading.Thread(target = myMinu, args = ())     t1.start()     t2.start()     t1.join()     t2.join()     print('done.....{0}'.format(sum)) 锁:哪个资源需要多个线程,就锁谁
import threading sum = 0 loopSum = 100000 lock = threading.Lock() def myAdd():     global sum, loopSum     for i in range(1, loopSum):         lock.acquire() #上锁         sum += 1         lock.release() #释放锁 def myMinu():     global sum, loopsum     for i in range(1, loopSum):         lock.acquire()         sum -= 1         lock.release() if __name__ == '__main__':     print('starting.....{0}'.format(sum))     t1 = threading.Thread(target = myAdd, args = ())     t2 = threading.Thread(target = myMinu, args = ())     t1.start()     t2.start()     t1.join()     t2.join()     print('done.....{0}'.format(sum))

 

 

 

 

锁:哪个资源需要多个线程,就锁谁

可重入锁:可以被一个线程多次申请

 

转载于:https://www.cnblogs.com/chickenwrap/p/10171561.html

你可能感兴趣的文章
SQL代码自动生成器
查看>>
svn最厉害入门教程
查看>>
类似心跳的动画缩放
查看>>
Oracle DBA课程系列笔记(7_1)
查看>>
RedHat EL5 安装Oracle 10g RAC之--系统环境配置(1)
查看>>
用组策略如何去掉Windows 2003开机组合键
查看>>
Ext.MessageBox.show()方法的使用
查看>>
HTML 标签收集整理
查看>>
我的友情链接
查看>>
ThinkPHP-空操作
查看>>
Mysql锁机制分析
查看>>
C# 通过委托实现两个程序集间的双向调用
查看>>
android源代码提示文本框还能输入多少个字符
查看>>
我奋斗了18年才和你坐在壹起喝咖啡
查看>>
浦发银行网上银行系统不再支持 Firefox / Chrome 浏览器了
查看>>
silverlight数据绑定 故事板
查看>>
我的友情链接
查看>>
mysql常用数据类型的使用方式--日期时间型
查看>>
Astar 求两点之间最短路径算法(转载+自己注释)
查看>>
我的友情链接
查看>>