zoukankan      html  css  js  c++  java
  • python线程详解

    #线程状态

    #线程同步(锁)
    #多线程的优势在于可以同时运行多个任务,至少感觉起来是这样,但是当线程需要共享数据时,可能存在数据不同步的问题。

    #threading模块
    #常用方法:
    '''
    threading.currentThread():返回当前的线程变量
    threading.enumerate():返回一个包含正在运行的线程的list,正在运行指:线程启动后,结束前,不包含启动前和终止后的线程
    threading.activeCount():返回正在运行的线程数量,与len(threading.enumerate())具有相同的效果
    '''

    # -*- coding: cp936 -*-
    #python 27
    #xiaodeng
    #http://www.jb51.net/article/68323.htm
    #python线程详解
    
    
    
    #案例
    import threading
    
    #方法1:将要执行的方法作为参数传给Thread的构造方法
    def func():
        print 'xiaodeng'
    
    t=threading.Thread(target=func)
    t.start()
    t.join()#join([timeout]): 阻塞当前上下文环境的线程,直到调用此方法的线程终止或到达指定的timeout(可选参数)
    
    #方法2:从Thread继承,并重写run()
    class MyThread(threading.Thread):
        def run(self):
            print '重写run()方法'
    
    t=MyThread()
    t.start()
    t.join()
    
    
    '''
    #构造方法:
    Thread(group=None,target=None,name=None,args=(),kwargs={})
    group:线程组,目前还没有实现,库引用时提示必须是None
    target:要执行的方法
    name:线程名
    args/kwargs:要传入方法的参数,args和kwargs两个参数其实是二选一
    #实例方法
    isAlive():返回线程是否在运行
    get/setName(name):获取/设置线程名
    is/setDaemon(bool):获取/设置是否守护线程。初始值从创建该线程的线程继承,当没有非守护线程仍在运行时,程序将终止
    start():启动线程
    join([timeout]):阻塞当前上下文环境的线程。
    '''
    
    
    #Lock()
    #lock是可用的最低级的同步指令,Lock处于锁定状态时,不被特定的线程拥有,Lock包含2种状态--锁定和非锁定以及2个基本的方法
    #构造方法:
    #Lock()
    #实例方法:
    #acquire([timeout]):使线程进入同步阻塞状态,尝试获得锁定
    #release():释放锁,使用前线程必须已获得锁定,否则将抛出异常
    #案例:
    print '--'*25
    import threading
    import time
    
    data=0
    lock=threading.Lock()
    
    def func():
        global data
        print threading.currentThread().getName()
    
        #调用acquire([timeout])时,线程将一直阻塞
        #直到获得锁定或直到timeout秒后
        #返回是否获得锁定
        if lock.acquire():
            print 'lock.acquire():',lock.acquire()
            print '%s get the lock.' % threading.currentThread().getName()
            data+=1
            time.sleep(2)
            print '%s release lock...' % threading.currentThread().getName()
    
            #调用release()将释放锁
            lock.release()
    
    t1=threading.Thread(target=func)
    t2=threading.Thread(target=func)
    t3=threading.Thread(target=func)
    t1.start()
    t2.start()
    t3.start()
  • 相关阅读:
    【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档(转
    PHP Client for Mysql Binlog
    MySQL的binlog日志恢复(转)
    Linux 普通进程 后台进程 守护进程(转)
    实战:MySQL Sending data导致查询很慢的问题详细分析(转)
    mysql索引无效且sending data耗时巨大原因分析
    阿里云-DRDS(转)
    MySQL查看SQL语句执行效率(转)
    nginx php-fpm 输出php错误日志(转)
    Golang指针基本介绍及使用案例
  • 原文地址:https://www.cnblogs.com/dengyg200891/p/4941218.html
Copyright © 2011-2022 走看看