• Python之多线程:Threading模块


    1、Threading模块提供的类
    Thread,Lock,Rlock,Condition,Semaphore,Event,Timer,local
    2、threading模块提供的常用的方法
    (1)threading.currentThread(): 返回当前的线程变量。
    (2)threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
    (3)threading.activeCount():返回正在运行的线程数量,与len(threading.enumerate())有相同的结果
     
    一、Thread 线程类
    1、t1=threading.Thread(target=,name=,args=,kwargs=)
    参数说明:
    •group:线程组,目前还没有实现,库引用中提示必须是None;
    •target:要执行的方法;
    •name:线程名;
    •args/kwargs:要传入方法的参数。
     
    import threading
    import time
    def func1(a=None,b=None):
    print a,b
    time.sleep(1)
     
    t1=threading.Thread(target=func1,args=('hello','world')) //这句话只是创建了一个线程,并未执行这个线程,此时线程处于新建状态。
    t1.isAlive() 线程是否在运行
    t1.getName 取线程名
    t1.setName('test1') 设置线程名
    t1.start() 启动线程,此时线程仍未处于运行状态,只是处于准备状态。
    t1.join() 等待线程执行完
     
    进程所在的线程是主线程
    2、守护线程
    t1.setDaemon(True)
    主进程执行结束时,如果是守护线程,且守护线程没有执行结束,也一并随着主线程退出
    # encoding=utf-8
    import threading
    import time
     
    def func1(a=None, b=None):
    print a,b
    print 'enter func1'
    time.sleep(5)
    print 'exit func1'
     
    t1 = threading.Thread(target=func1, args=('Hello ','World!'))
    print t1.isAlive()
    print t1.getName()
    t1.setDaemon(True)
    print 'daemon:',t1.isDaemon()
    t1.setName('test1')
    print t1.getName()
    t1.start()
    time.sleep(1.1)
    print t1.isAlive()
    print 'main thread end'
     
    3、threading.currentThread() 主线程MainThread
    二、多线程编程的方式
    1、创建线程的两种方式
    方式一:Thread的方式,新建一个线程实例,通过target传入执行流。通过args传入参数
    方式二:Thread类通过重写的方式,t1.start()(内部调用了run())。所以可以重写run()方法,达到我们想要的效果
     
    2、方式二:重写Thread类
    import threading
    class Mythread(threading.Thread):
    def __init__(self,a):
    threading.Thread.__init__(self):
    self.a=a
    def run(self):
    print 'now sleep',self.a,'seconds'
    time.sleep(a)
    print 'sleep end'
     
    t1=MyThread(3)
    t2=MyThread(2)
    t1.start()
    t2.start()
    t1.join()
    t2.join()
     
    #隐含问题:对于线程的执行结果,主线程如何获取?
    (1)通过队列的方式
    (2)通过全局变量的方式
     
    3、并发与并行
    并发是指一个时间段内同时运行,表示的是一个区间
    而并行是指在同一个时间点上都在运行,是一个点,并且并发在同一时间点上只能有一个程序在运行
    并发线程的两种关系:同步与互斥。
     
    三、线程池
    from multiprocessing.dummy import Pool
    def func(a):
    time.sleep(1)
    print a
    if __name__=='__main__':
    lista=[1,2,'a','b','5']
    pool=Pool(5)
    pool.map(func,lista)
    pool.close() #线程池不接受新线程的请求
    pool.join() #等待线程全部执行完
     
  • 相关阅读:
    #2051:Bitset(进制转化)
    #2054:A == B ?(水题坑人)
    #2045:不容易系列之三LELE的RPG难题(dp递推)
    #2037:今年暑假不AC
    #2036:改革春风吹满地
    OJ中的语言选项里G++ 与 C++的区别
    如何在CSDN上如何快速转载博客
    Python之路(第八篇)Python内置函数、zip()、max()、min()
    Python编程笔记(第一篇)Python基础语法
    Python之路(第七篇)Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数
  • 原文地址:https://www.cnblogs.com/emily-qin/p/7210910.html
Copyright © 2020-2023  润新知