文档章节

thread、threading

c
 cics
发布于 2016/10/18 14:28
字数 380
阅读 2
收藏 0
点赞 0
评论 0

互斥锁、嵌套互斥锁、条件变量、Event、local

local:全局定义,线程局部变量。其它线程环境下修改不影响其它线程

thread 

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import thread, time

g_loack = thread.allocate_lock()
g_count = 0

def func1():
    global g_count, g_loack

    #锁操作
    g_loack.acquire()
    val = g_count
    val += 1
    g_count = val
    g_loack.release()

    print 'done func1'

def func2():
    global g_count, g_loack

    #锁操作
    g_loack.acquire()
    val = g_count
    val += 1
    g_count = val
    g_loack.release()

    print 'done func2'

def add_thread():
    return thread.start_new_thread(func1), thread.start_new_thread(func2)

if __name__ == '__main__':
    thread_list = []
    for n in range(10):
        thread_list.extend(add_thread())

    time.sleep(10)
    print g_count



 

threading

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time
import threading

g_count = 0
g_mutex_lock = threading.Lock()  #全局互斥锁
g_mutex_rlock = threading.RLock() #可重入锁,防止反复加锁造成死锁
g_condigtion = threading.Condition()  #条件变量

class TheadTest(threading.Thread):
    def __init__(self, **kwargs):
        super(TheadTest, self).__init__(**kwargs)
        self.event = threading.Event()

    def run(self):
        """
        工作函数,父类调用
        """

    def mutex_lock_test(self):
        """
        数据互斥,加锁解锁
        """
        global g_count, g_mutex_lock

        g_mutex_lock.acquire()
        #g_mutex_lock.acquire()  #重复加锁造成死锁,可使用RLock
        count = g_count
        count += 1
        g_count = count
        #g_mutex_lock.release()
        g_mutex_lock.release()

    def mutex_rlock_test(self):
        """
        重入互斥锁
        可反复加锁防止死锁
        """
        global g_count, g_mutex_rlock

        g_mutex_rlock.acquire()
        g_mutex_rlock.acquire()
        count = g_count
        count += 1
        g_count = count
        g_mutex_rlock.release()
        g_mutex_rlock.release()

    def condigtion_wait(self):
        """
        条件变量
        """
        global g_count, g_condigtion

        #加锁
        g_condigtion.acquire()
        #判断条件
        while g_count < 10:
            g_condigtion.wait()
        #循环条件不成立break
        g_condigtion.release()

    def condigtion_notify(self):
        global g_condigtion, g_count

        g_condigtion.acquire()
        g_count = 10
        g_condigtion.notify()  #激活条件变量中加锁等待的线程
        g_condigtion.release()

    def event_wait(self):
        self.event.wait()
        print 'event set'

    def event_set(self):
        self.event.set()


class TheadTestExt(TheadTest):
    def run(self):
        print 'thead name:%s' % self.name
        #self.mutex_lock_test()
        #self.mutex_rlock_test()
        #self.condigtion_wait()
        self.event_wait()


def thead_exec(cls, count=1):
    theads = [cls(name='thead num %s' % count) for count in range(count)]
    for thead in theads:
        thead.start()
    return theads

if __name__ == '__main__':

    #条件变量测试
    theads = thead_exec(TheadTestExt)
    time.sleep(1)
    theads[0].event_set()
    for thead in theads:
        thead.join()
    pass



 

© 著作权归作者所有

共有 人打赏支持
c
粉丝 0
博文 63
码字总数 5770
作品 0
广州
程序员
Python中的threading

#!/usr/bin/env python # -- coding: utf-8 -- import threading, time #新线程执行的代码: def loop(): print('thread %s is running...' % threading.current_thread().name) n = 0 while ......

io123
2016/04/01
0
0
Python中的threading

#!/usr/bin/env python # -- coding: utf-8 -- import threading, time #新线程执行的代码: def loop(): print('thread %s is running...' % threading.current_thread().name) n = 0 while ......

io123
2016/04/01
0
0
Python: 关于thread模块和threading模块的选择

最近在阅读Python核心编程(第二版)。 作者在多线程编程一章讲到thread和threading这两个模块时, 提到要避免使用thread模块,取而代之地使用threading模块。 之后点明了原因—— "更高级别...

mickelfeng
2016/08/05
70
0
Python线程锁

多线程适用于IO密集型,多线程实现方式有两种,详见下方例子 例子: import threading class MyThread(threading.Thread): def init(self, args): #使用super写法,按照父类.方法的方式直接重...

粗粮面包
2017/12/13
0
0
python 多线程之threading

一些常用函数: 个人比较喜欢创建线程类来实现多线程来个简单的例子,开2个线程,打印时间,未加锁情况 结果很明显,线程1和线程2同时执行 加锁情况 结果很明显,加锁之后,线程1执行完,线程...

不肥的小肥羊
2016/05/29
55
0
Python第十三堂课(并发)

一、并发 二、并发的解决 二、进程和线程 三、线程的状态 四、Python中的线程开发 名称含义current_thread( )返回当前线程对象main_thread()返回主线程对象active_count( )当前处于alive状态...

菜鸡满地跑
2017/12/19
0
0
python之多线程并发处理模块-threading

thread:多线程的底层支持模块,一般不建议使用; threading:对thread进行了封装,将一些线程的操作对象化,一般采用这种方法实现多线程编程 多线程实现有两种模式: 1.创建线程要执行的函数...

zhpfxl
2016/12/27
0
0
运维学python之爬虫中级篇(二)线程、协程

上一篇讲了多进程,今天我们就继续讲多线程。 1 简介 线程线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成...

578384
01/06
0
0
Python多线程threading用法

Python里面经常会用到多线程,即所有的方法在同一时间开始运行,而不是按顺序一个一 个运行。所用到的模块为threading,下面详解threading用法。 我们写三个方法,one、two、three并正常运行...

niedongri
2017/08/01
0
0
[Python] 多线程编程

Python 提供了几个用于多线程编程的模块,包括thread, threading 和Queue 等。thread 和threading 模块允许程序员创建和管理线程。thread 模块提供了基本的线程和锁的支持,而threading提供了...

长平狐
2013/06/03
147
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

纯Python实现鸢尾属植物数据集神经网络模型[图]

纯Python实现鸢尾属植物数据集神经网络模型[图]: 尝试使用过各大公司推出的植物识别APP吗?比如微软识花、花伴侣等这些APP。当你看到一朵不知道学名的花时,只需要打开植物识别APP,拍摄一张...

原创小博客
2分钟前
0
0
Java 基础 之 常量类型转换

http://www.verejava.com/?id=16992572054911 /*类型转换分为以下几种情况1. 整型类型转换 2. 浮点类型转换3. 布尔类型转换4. 字符类型转换 >>>阅读全文...

全部原谅
2分钟前
0
0
2018安卓巴士开发者大会打造Android技术盛宴

2018安卓巴士开发者大会打造Android技术盛宴2018安卓巴士开发者大会将于8月25日在上海举行,作为中国最具前沿性、专业性的安卓技术会议,将邀请来自爱奇艺、阿里、饿了么等知名企业的一线工程...

逆鳞龙
4分钟前
0
0
Spring框架中的设计模式(二)

Spring框架中的设计模式(二) 原创: 瑞查德-Jack 在 上一篇 中我们在Spring中所谈到的设计模式涉及到了创建模式三剑客和1个行为模式(解释器模式)。这次我们会将眼光更多地关注在具有结构性和...

瑞查德-Jack
4分钟前
0
0
JS基础-DOM Event对象

简介 Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。 事件通常与函数结合使用,函数不会在事件发生前被执行! ==注:详表见《JS基础-...

ZHAO_JH
6分钟前
0
0
tomcat 8.5 远程登录管理页面

1、访问的来源受限注释掉 <?xml version="1.0" encoding="UTF-8"?><!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. S......

xixingzhe
13分钟前
0
0
JSON Web Token - 在Web应用间安全地传递信息

JSON Web Token - 在Web应用间安全地传递信息 Sep 06, 2015 in Engineering JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。 ...

祖冲之
19分钟前
0
0
Java面试基础篇——第七篇:浅析final关键字

Java有许多关键字,static和final这两个是我们必须掌握的,它们有很多种用法,而且在恰当的环境下使用它们,可以提升程序运行性能,优化程序结构,现在我们先来了解下final关键字。 1. final...

developlee的潇洒人生
26分钟前
1
0
Java安全

安全性问题 DDOS攻击 利用软件开发设计漏洞,进行低成本的攻击消耗服务器CPU,内存资源,例如哈希碰撞攻击,加密,解密,图形处理等计算密集型应用 不能靠用户合理使用解决安全问题 文件上传攻击,...

洋葱94
26分钟前
0
0
IDEA2017环境安装配置

一、下载安装 安装2018版: http://www.jetbrains.com/idea/ 二、获取注册码 1、进到文件夹中:C:\Windows\System32\drivers\etc ,找到hosts文件,用记事本编辑 2、如果没有找到hosts文件,...

一个yuanbeth
28分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部