2018-07-25-Python全栈开发day33-进程与线程

本文介绍了操作系统的历史和发展,从无操作系统到个人计算机时代,并详细解释了进程与线程的概念及区别。此外,还提供了Python中使用threading模块创建和管理线程的具体示例。

1.操作系统历史

  1.1 无操作系统

    单个程序运行需要经历输入、运算、输出等过程,多个程序运行时较为繁琐,计算机利用率低

  1.2 批处理系统  

    多个程序列为一个清单统一进行运行。 单一程序运行结束后要等到所有程序运行完才能得到结果

  1.3多道程序设计

    某一程序遇到io阻塞时,自动切换到另一程序,提高计算机的运行效率。

  1.4 个人计算机

    随着硬件的发展,个人计算机出现,不必在再和其他人分享计算机。此时用户之间的矛盾已经解决

2.程序之间的矛盾

  2.1 进程

    进程是指某个程序的运行过程(抽象的概念),包括程序、程序所需的资源以及进程控制块

    2.1.1 进程出现的原因

      可以在同一时间做多件事,不同进程之间的资源不共享。

  2.2 线程

    线程可以看做是个小型的进程,因为进程在进行切换时,数据的交换很繁琐,耗费资源,

    线程在进程之中,进程中的线程可以共享进程的资源,这样不同线程进行切换时耗费资源小。

  2.3 进程与线程

    一个进程可以有多个线程,最起码有一个线程。

    进程是资源分配的最小单位,线程是最小的执行单位。

3.程序的切换

  •   IO阻塞
  • 以时间为单位自动切换(毫秒级别)

  当进程需要以上两条时,会自动切换进程,线程同理。

4.线程的调用 threading模块

  线程一般是调用函数

  

import threading#导入线程模块
import time

def Hi(num):
    print('hello %s' %num)
    time.sleep(3)
#线程的接口
t1=threading.Thread(target=Hi,args=(10,))#是个类,实例化,target是这个线程执行的名字,args是参数
t1.start()
t2=threading.Thread(target=Hi,args=(4,))#是个类,实例化,target是这个线程执行的名字,args是参数
t2.start()
print('aaa')#输出结果是没有等三秒,直接出来了,属于主线程

  此时,一共有三个线程,主线程,t1,t2。这三个线程是同时运行的,虽然主线程已经运行完毕,但是需要在子线程运行完之后再关闭。

4.1 join方法

  提高某个子线程的优先级,在这个子线程运行完之后再运行其他线程,如果再次之前其他线程已运行,则同时运行

  

import threading#导入线程模块
import time

def Hi():
    print('hi',time.ctime())
    time.sleep(3)
    print('this is hi end',time.ctime())
def hello():
    print('this is hello',time.ctime())
    time.sleep(5)
    print('this is hello end',time.ctime())
#线程的接口
t1=threading.Thread(target=Hi,)#是个类,实例化,target是这个线程执行的名字,args是参数
t2=threading.Thread(target=hello)#是个类,实例化,target是这个线程执行的名字,args是参数
t1.start()
t1.join()
t2.start()
print('aaa')#输出结果是没有等三秒,直接出来了,属于主线程

结果:

hi Wed Jul 25 22:22:32 2018#此时t1线程开启
this is hi end Wed Jul 25 22:22:35 2018#t1线程优先级高,优先结束
this is hello Wed Jul 25 22:22:35 2018#t2进程开启
aaa#主线程执行结束
this is hello end Wed Jul 25 22:22:40 2018#t2线程结束

其他:

import threading#导入线程模块
import time

def Hi():
    print('hi',time.ctime())
    time.sleep(3)
    print('this is hi end',time.ctime())
def hello():
    print('this is hello',time.ctime())
    time.sleep(5)
    print('this is hello end',time.ctime())
#线程的接口
t1=threading.Thread(target=Hi,)#是个类,实例化,target是这个线程执行的名字,args是参数
t2=threading.Thread(target=hello)#是个类,实例化,target是这个线程执行的名字,args是参数
t1.start()
t2.start()
t1.join()
print('aaa')#输出结果是没有等三秒,直接出来了,属于主线程
hi Wed Jul 25 22:24:15 2018
this is hello Wed Jul 25 22:24:15 2018
this is hi end Wed Jul 25 22:24:18 2018
aaa#t1线程优先执行完,再执行主线程
this is hello end Wed Jul 25 22:24:20 2018

4.2 setDaemon(True)方法==守护程序,

  若主线程执行完毕,则不必等待这个线程,此子线程和主线程同时关闭

  

import threading#导入线程模块
import time

def Hi():
    print('hi',time.ctime())
    time.sleep(3)
    print('this is hi end',time.ctime())
def hello():
    print('this is hello',time.ctime())
    time.sleep(5)
    print('this is hello end',time.ctime())
#线程的接口
t1=threading.Thread(target=Hi,)#是个类,实例化,target是这个线程执行的名字,args是参数
t2=threading.Thread(target=hello)#是个类,实例化,target是这个线程执行的名字,args是参数
t1.start()
t2.setDaemon(True)#t2作为守护线程,将会在T1执行完之后,不必等待自己的五秒钟,直接在主线程执行完之后结束线程
t2.start()

print('aaa')#输出结果是没有等三秒,直接出来了,属于主线程
hi Wed Jul 25 22:27:06 2018
this is hello Wed Jul 25 22:27:06 2018aaa

this is hi end Wed Jul 25 22:27:09 2018

5.join和setDaemon都是线程实例的方法

  

  

转载于:https://www.cnblogs.com/hai125698/p/9368756.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值