多线程(python核心编程)

多线程(multithread)

简介

多线程编程:独立的任务同时运行

由于python虚拟机是单线程(GIL)的原因,只有线程在执行I/O密集型的应用时才能更好的发挥python的并发性

线程与进程

计算机程序只是存储在磁盘上的二进制(或其它类型)的文件。只有把他们加载到内存并被操作系统调用,才拥有生命周期。

进程

  • 进程是个执行中的程序
  • 每个进程有自己的地址空间,内存,数据栈及其他用于跟踪执行的辅助数据

线程

线程是在同一进程下执行的,并共同享有相同的上下文

线程包括开始,执行顺序,结束三部分,它有一个指令指针,用于记录当前运行的上下文
其它线程运行时,它可以被抢占(中断)和临时挂起(也称睡眠)----这种说法叫让步(yielding)

  • 一个进程中的线程和主线程享有同一片数据空间
  • 线程一般多并发执行

全局锁

pass

python中的模块

thread:低级
threading:高级
queue:创建一个队列数据结构,用于线程之间的共享

多线程的创建方法

  • 创建Thread实例传函数/创建Thread实例传可调用的类实例/继承Thread子类,子类实例化
threads = []
for i in thread_num:
    t = 实例化目标函数对象并传参
    threads.append(t)#添加入threads列表
    
for i in thread_num:
    threads[i].start()#启动线程
for i in thread_num:
    threads[i].join()
    #join()阻碍线程直到线程执行完成,线程一旦启动,一直执行下去,直到给定的函数完成退出。

通用Thread子类(basic)

import threading
from time import ctime

class MyThread(threading.Thread):
    def __init__(self,func,args,name=''):
        threading.Thread.__init__(self)
        self.name = name
        self.func = func
        self.args = args
    
    def getResult(self):
        return self.res
    
    def run(self):
        print 'starting',self.name,' at: ',ctime()
        self.res = self.func(*self.args)
        print self.name,'finished at:',ctime()

你可能感兴趣的:(多线程(python核心编程))