Python多线程编程之多线程加锁操作示例

yipeiwu_com7年前Python基础

本文实例讲述了Python多线程编程之多线程加锁操作。分享给大家供大家参考,具体如下:

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

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

# -*- coding:utf-8 -*-
#! python2
import threading
start_task = 0
task_num = 10000
mu = threading.Lock()  ###通过工厂方法获取一个新的锁对象
class MyThread(threading.Thread):  ###类MyThread继承基类threading.Thread
  def run(self): ##线程启动的入口函数,子类需重写
    global start_task
    global mu
    global start_task
    while start_task < task_num:  ##如果任务没有完成,则继续
      if mu.acquire():  ##加锁
        if start_task < task_num:
          print start_task
          start_task = start_task + 1
        mu.release()  ##释放锁
def test():
  thread_all = []
  for i in range(6): ##for循环创建6个线程
    t = MyThread() ##创建线程
    thread_all.append(t)
    t.start()  ###启动线程
  for i in range(6):
    thread_all[i].join()  ##等待线程结束
if __name__ == "__main__":
  test()

运行上述代码,则输出1~9999

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

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》、《Python+MySQL数据库程序设计入门教程》及《Python常见数据库操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

相关文章

JSON文件及Python对JSON文件的读写操作

一,什么是JSON文件 JSON和XML都是互联网上数据交换的主要载体。 在JSON出现之前,大家一直用XML来传递数据。因为XML是一种纯文本格式,所以它适合在网络上交换数据。XML本...

用Python的Django框架编写从Google Adsense中获得报表的应用

 我完成了更新我们在 Neutron的实时收入统计。在我花了一周的时间完成并且更新了我们的PHP脚本之后,我最终认决定开始使用Python进行抓取,这是值得我去花费我的时间和精...

numpy 计算两个数组重复程度的方法

最近有个需求,是做两个数组重复程度计算,麻烦就麻烦在单个数组的元素有可能重复,处理思路如下: 1. 找到重复元素 2. 元素个数统计,利用np.bincount转换,即元素个数统计到元素...

解决csv.writer写入文件有多余的空行问题

在用csv.writer写入文件的时候发现中间有多余的空行。 最早打开方式只是‘w',会出现多余的空行,网上建议使用binary形式‘wb'打开可以解决问题: with open('...

使用pandas把某一列的字符值转换为数字的实例

今天小编就为大家分享一篇使用pandas把某一列的字符值转换为数字的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 使用map的方法就可以实现把某一列的字符类型的值...