博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python多线程编程之多线程加锁
阅读量:6770 次
发布时间:2019-06-26

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

Python语言本身是支持多线程的,不像PHP语言。

下面的例子是多个线程做同一批任务,任务总是有task_num个,每次线程做一个任务(print),做完后继续取任务,直到所有任务完成为止。

1 #coding:utf-8 2 import threading 3  4 start_task = 0 5 task_num = 10000 6 mu = threading.Lock()   ###通过工厂方法获取一个新的锁对象 7  8 class MyThread(threading.Thread):   ###类MyThread继承基类threading.Thread 9 10     def run(self):  ##线程启动的入口函数,子类需重写11         global start_task12         global mu13         global start_task14 15         while start_task < task_num:    ##如果任务没有完成,则继续16             if mu.acquire():    ##加锁17                 if start_task < task_num:18                     print start_task19                     start_task = start_task + 120                 mu.release()    ##释放锁21 22 def test():23     thread_all = []24     for i in range(6):  ##for循环创建6个线程25         t = MyThread()  ##创建线程26         thread_all.append(t)27         t.start()   ###启动线程28 29     for i in range(6):30         thread_all[i].join()    ##等待线程结束31 32 if __name__ == "__main__":33     test()

 

测试加锁与不加锁效果:将任务数设置为1千万或者以上,在多核机器上将print输出分别保存,就能说明问题。

转载于:https://www.cnblogs.com/xudong-bupt/p/4830895.html

你可能感兴趣的文章
Flex 使用wigdet组件库 实现自定义事件 派发 和 监听
查看>>
AS3类库资源大集合
查看>>
【转】 [Unity3D]手机3D游戏开发:场景切换与数据存储(PlayerPrefs 类的介绍与使用)...
查看>>
【转】cocos2dx 3.x 集成protobuf
查看>>
NOI2017游记
查看>>
zabbix监控到异常后自动执行对应命令
查看>>
struts的体系结构
查看>>
不同数据库的分页方法
查看>>
常见设计模式---单例设计模式
查看>>
好的软件说明
查看>>
ORACLE DBLINK 使用
查看>>
被遗忘的宝藏-LaTeX发行版自带字体&自己一些字体心得
查看>>
常微分方程
查看>>
ArcSDE空间数据库中SDE用户使用探讨 (转载)
查看>>
cmd net use
查看>>
docker 7 docker的帮助命令
查看>>
set .net principle
查看>>
Map统计数组的相同字符的总数
查看>>
Android学习小记-----拦截电话/拒接电话,规避拒接电话前响一声或者两声的问题...
查看>>
iphone 如何发布应用程序
查看>>