线程 -threading模块

主要内容:

  • 1.线程的创建
  • 2.多线程与多进程
  • 3.锁
  • 4.守护线程
  • 5.信号量

1.线程的创建

(1)方式一:

from threading import Thread
import time
def func(n):
    time.sleep(2)
    print(n)

if __name__ == '__main__':
    t = Thread(target=func,args = (1,))
    t.start()
    print("主线程结束")
线程创建方式1

(2)方式二:

from threading import Thread

class MyThread(Thread):
    def __init__(self,n):
        super().__init__()
        self.n = n

    def run(self):
        print (self.n)

if __name__ == '__main__':
    t = MyThread("呵呵")
    t.start()
    print("主线程结束")
线程创建方式2

2.多线程与多进程

进程:导入的模块、执行的python文件的文件所在位置、内置的函数、文件里面的这些代码、全局变量等等,然后线程里面有自己的堆栈(类似于一个列表,后进先出)和寄存器,里面存着自己线程的变量,操作等等,占用的空间很小

(1)线程与进程的效率对比

import time
from multiprocessing import Process
from threading import Thread

def func(n):
    num = 0
    for i in range(n):
        num += i
if __name__ == '__main__':
    #在主进程下开启线程
    t_s_t =time.time()
    t_lst =[]
    for i in range(10):
        t = Thread(target=func,args=(10,))
        t.start()
        t_lst.append(t)
    [tt.join() for tt in t_lst]
    t_e_t = time.time()
    t_dif_t = t_e_t - t_s_t
    #在主进程下开启子进程
    p_s_t = time.time()
    p_lst = []
    for ii in range(10):
        p = Process(target=func,args=(10,))
        p.start()
    [pp.join() for pp in p_lst]
    p_e_t = time.time()
    p_dif_t = p_e_t -p_s_t
    print("线程>>>>",t_dif_t)   #0.002962350845336914
    print("进程>>>>",p_dif_t)   #0.29871106147766113
    print("主线程结束")
进程与线程的效率对比

 

posted @ 2018-10-28 17:47  一路向北_听风  阅读(128)  评论(0编辑  收藏  举报