zoukankan      html  css  js  c++  java
  • 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() #等待线程全部执行完
     
  • 相关阅读:
    POJ 1328 Radar Installation
    POJ 1700 Crossing River
    POJ 1700 Crossing River
    poj 3253 Fence Repair (贪心,优先队列)
    poj 3253 Fence Repair (贪心,优先队列)
    poj 3069 Saruman's Army(贪心)
    poj 3069 Saruman's Army(贪心)
    Redis 笔记与总结2 String 类型和 Hash 类型
    数据分析方法有哪些_数据分析方法
    数据分析方法有哪些_数据分析方法
  • 原文地址:https://www.cnblogs.com/emily-qin/p/7210910.html
Copyright © 2011-2022 走看看