python 多线程

进程与线程

进程:一个程序在一个数据集上的一次动态执行过程,是最小的资源单位

           要以一个整体形式暴露给操作系统,里面包含对各种资源的调用,内存对各种资源管理的集合

线程:是操作系统的最小执行单位,是一串指令的集合,最接近执行体

进程与线程的区别

一个程序至少有一个进程,一个进程至少有一个线程(进程可以理解为线程的容器)

进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的执行效率

线程不能独立存在,必须依存在应用程序中,由应用程序提供多个线程执行控制

一个线程可以创建和撤销另一线程,同一进程中的多个线程之间可以并发执行

 

简单的多线程创建

下面这个代码是生成了两个子线程对象,执行程序打印完test1t1和testt2,之后总共只用等待大约两秒

比起以前执行两个函数要少花费一半时间

import threading
import time
def run(n):
    print("test1",n)
    time.sleep(2)
t1=threading.Thread(target=run,args=("t1",))
t2=threading.Thread(target=run,args=("t2",))
t1.start()
t2.start()

继承式多线程创建

继承式是调用的另一种方式

import threading,time
class MyThread(threading.Thread):
    def __init__(self,n):
        super(MyThread,self).__init__()
        self.n=n
    def run(self):
        print("running task",self.n)

t1=MyThread("t1")
t2=MyThread("t2")
t1.start()
t2.start()

阻塞线程 join()

import threading
import time
def music():
    print("begin music",time.ctime())
    time.sleep(3)
    print("end music",time.ctime())
def game():
    print("begin game",time.ctime())
    time.sleep(5)
    print("end game",time.ctime())
if __name__=="__main__":
    t1=threading.Thread(target=music)
    t2=threading.Thread(target=game)
    t1.start()
    t1.join()
    t2.start()
    #t2.join()
    print("ending.....")

仔细看t1.join()的位置

执行结果:

好好看看上边结果的秒数!

那如果想要子线程都执行完再执行主线程怎么办呢,那就创建列表,把子线程对象存进去,for循环start(),再for循环join(),如下!

import threading,time
class MyThread(threading.Thread):
    def __init__(self,n):
        super(MyThread,self).__init__()
        self.n=n
    def run(self):
        print("running task",self.n)
        ti
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值