码迷,mamicode.com
首页 > 其他好文 > 详细

threading模块

时间:2018-11-24 14:13:21      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:自动   time   守护   height   子进程   并发   守护线程   说明   默认   

多线程和多进程都可以很容易的实现并发,协程通过切换上下文来充分利用cpu实现并发效果
threading模块

 

Thread类的基本状态和行为

  属性名和值:

  name=None,group=None,target=None,args=(),kwargs={},daemon=None

  方法:

  start(),join(),run(), join()
  使主线程等待使用join()方法的子进程结束,否则阻塞自己 ,
  Thread中的子进程默认daemon就是None,这意味着子进程不结束,主进程也不结束,说明主进程是个好大哥,
  而thread模块开启的子进程就没这个命,主进程结束,子进程跟着完蛋。
  join()方法:
    效果 :使主线程等待使用join()方法的子线程结束,否则阻塞自己 ,
    使用场景:主线程需要接受子线程的计算结果时使用
  守护线程是指不重要的进程,如果Thread实例化子进程的时候将其设置成守护进程,主线程结束时,将结束子线程。

 

子进程的创建与运行,分为三种方式,

  -实例化Thread,target=自定义函数

  -实例化Thread,target=自定义类,start()这个实例时,会自动调用自定义类的__call__()方法,所以,自定义类必须要自定义__call__()方法。

  -自定义创建一个Thread的派生子类,然后自定义其run()方法,然后实例化这个类,然后调用其start()方法,
    -需要注意,实例化子进程使用一次,不能再次调用start()方法

主要使用第一种方法,和第三种方法

  给出第三种方法的例子

  

import time, threading
import threading,time

class Mythread(threading.Thread):
    def __init__(self,args):
        threading.Thread.__init__(self)
        self.args=args    
    def do_1(self):
        print(我是do_1 我是做好事)
    def do_2(self):
        print(我是do_2 我是做傻事)
    def do_3(self):
        print(我是do_3 我是做坏事)    
    def run(self): 
        time.sleep(1)
        if self.args % 3==0:
            self.do_1()
        if self.args % 3==1:
            self.do_2()    
        if self.args % 3==2:
            self.do_3()

            if __name__ == __main__:    
    for i in range(20):
        t = Mythread(i)
        t.start()  
    print(大哥已经完事,等小弟们)    

运行结果:

大哥已经完事,等小弟们
我是do_2 我是做傻事
我是do_1 我是做好事
我是do_3 我是做坏事
我是do_1 我是做好事
我是do_2 我是做傻事
我是do_3 我是做坏事
我是do_1 我是做好事
我是do_1 我是做好事
我是do_2 我是做傻事
我是do_2 我是做傻事
我是do_3 我是做坏事
我是do_1 我是做好事
我是do_3 我是做坏事
我是do_2 我是做傻事
我是do_3 我是做坏事
我是do_2 我是做傻事
我是do_1 我是做好事
我是do_2 我是做傻事
我是do_3 我是做坏事
我是do_1 我是做好事

 

 

类方法:

  技术分享图片

active_count():存活的线程数量,可以用来并发线程速度

cuttent_thread():返回当前环境的Thread对象

enumerate():返回活动的Thread对象列表,

 [<_MainThread(MainThread, started 28388)>, <Mythread(Thread-1, started 21276)>, <Mythread(Thread-2, started 29028)>, <Mythread(Thread-3, started 29528)>, <Mythread(Thread-4, started 19448)>, <Mythread(Thread-5, started 26416)>, <Mythread(Thread-6, started 22084)>, <Mythread(Thread-7, started 31032)>, <Mythread(Thread-8, started 24824)>, <Mythread(Thread-9, started 14076)>, <Mythread(Thread-10, started 31076)>, <Mythread(Thread-11, started 22516)>, <Mythread(Thread-12, started 30032)>, <Mythread(Thread-13, started 22836)>, <Mythread(Thread-14, started 19340)>, <Mythread(Thread-15, started 27456)>, <Mythread(Thread-16, started 31292)>, <Mythread(Thread-17, started 26192)>, <Mythread(Thread-18, started 22444)>, <Mythread(Thread-19, started 25536)>, <Mythread(Thread-20, started 30204)>]

  

setprofile(func):为所有进程设置一个trace函数
setprofile(func):为所有线程设置一个profile函数
stack_size(size=0):返回新创建线程的栈大小,设定之后创建线程的栈大小

threading模块

标签:自动   time   守护   height   子进程   并发   守护线程   说明   默认   

原文地址:https://www.cnblogs.com/yuanji2018/p/10011287.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!