python_way ,day11 多线程

多线程原理

def f1(arg)
    print(arg)
#单进程单线程的程序,好比后宫里面就一个慈宁宫 -- 主进程,一个王钢蛋  -- 线程

python中规定一个进程中只能有一个线程被cpu调度

这个的规定是因为python中一把锁:GIL,全局解释器锁

1、一个应用程序可以有多进程,可以有多进程

多进程,多线程目的是并发高,充分利用cpu

2、计算型操作占用cpu,使用多进程

  io型操作不占用cpu,使用多线程

import time

def f1(arg):
    time.sleep(5)
    print(arg)

import threading  #创建线程的模块都在这个模块中
t = threading.Thread(target=f1, args=(123,))  #target 让线程去做什么事,args 传递给f1函数的参数
t.start()               #创建了一个线程已经准备好开始 ,还没有被cpu调度,什么时候被cpu调度还不知道
print("end")            #默认主进程主线程运行到这里会等待,如果设置了t.setDaemon(True)就不等了

 

1.主线程 不等待子线程

t.setDaemon(True)     #默认主线程等待子线程 t.setDaemon(False)

import time

def f1(arg):    time.sleep(5)    print(arg)

import threading  #创建线程的模块都在这个模块中

t = threading.Thread(target=f1, args=(123,))  #target 让线程去做什么事,args 传递给f1函数的参数t.setDaemon(True)       #主线程不成子线程执行完就结束了,导致子线程没有执行就结束了t.start()               #创建了一个线程已经准备好开始 ,还没有被cpu调度,什么时候被cpu调度还不知道print("end")            #默认主进程主线程运行到这里会等待,如果设置了t.setDaemon(True)就不等了

2.主线程还可以选择 等待子线程的位置  

t.join()

import time

def f1(arg):
    time.sleep(5)
    print(arg)

import threading  #创建线程的模块都在这个模块中
t = threading.Thread(target=f1, args=(123,))  #target 让线程去做什么事,args 传递给f1函数的参数
t.start()               #创建了一个线程已经准备好开始 ,还没有被cpu调度,什么时候被cpu调度还不知道
print("end1")
print("end2")
print("end3")
t.join(4)                #主线程运行到此等待子线程执行完毕后再执行下面的4,5,6    join中的参数是最多等几秒, 这样执行到最后end6后主线程再等待子线程执行结果
print("end4")
print("end5")
print("end6")

  

如果我就是彻彻底底的不等了怎么办?

那我们就要将 join 和 setDaemon 一起使用了

import time

def f1(arg):
    time.sleep(5)
    print(arg)

import threading  #创建线程的模块都在这个模块中
t = threading.Thread(target=f1, args=(123,))  #target 让线程去做什么事,args 传递给f1函数的参数
t.setDaemon
t.start()               #创建了一个线程已经准备好开始 ,还没有被cpu调度,什么时候被cpu调度还不知道
print("end1")
print("end2")
print("end3")            

t.join(4)                #主线程运行到此等待子线程执行完毕后再执行下面的4,5,6    join中的参数是最多等几秒, 这样执行到最后end6后由于上面使用了t.setDaemon(True) 这时主线程也就不等子线程,直接结束了。

print("end4")
print("end5")
print("end6")

  

  

时间: 2024-10-12 13:23:27

python_way ,day11 多线程的相关文章

python_way ,day11 进程

if __name__ == '__main__': for i in range(10): p = Process(target=foo, args=(i,)) # p.daemon = True #主线程默认等子线程,写上这段就不等了 p.start() print("123") print("123") print("123") p.join() #主线程运行到这里等待所有的子线程,等某一个子线程完成了,再执行下一个进程. python_w

python_way day11 线程池

python_way day11 线程池 为什么需要线程池 线程多一些固然好,但是过多的线程反倒影响系统的负荷,所以我们就需要创建合适多的线程,哪我们把线程放到哪里?这时就放到线程池中. 线程池中存放着固定数量的线程池,谁需要使用线程,就从这个容器中取.取空了就要等待,什么时候有什么时候拿去用 但是python中没有给线程池提供比较好的方法,所以我们要自己写,或者使用第三方模块 import threading import queue import time class Mythreadpol

day11(多线程,唤醒机制,生产消费者模式,多线程的生命周期)

A:进程: 进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. B:线程: 线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序. C:简而言之: 一个程序运行后至少有一个进程,一个进程中可以包含多个线程 线程实现 实现的两种方式 继承Thread public class MyThread extends Thread{ @Ove

python_way ,day9 socket 和soctet多线程的使用

1.socket的基础 tcp/ip tcp ip 协议是主机接入互联网以及接入互联网互联两台主机通信互联标准 物理层:传输二进制 链路层:对二进制数进行分组  ,唯一标示一台主机 数据帧组成:包头:18个字节 原地址,目标地址,数据类型 ,   数据:最大1500字节 网络层:跑的ip协议,可以让各个子网之间进行通信  ,标示两台主机的ip地址 传输层:tcp/tdp,标示端口号:应用程序 会话层: 表示层 应用层 soctet:就是对tcp/ip协议的封装 socket只是对要发送的数据进行

传智播客 刘意_2015年Java基础视频-深入浅出精华版 笔记(day11~)(2016年2月3日16:01:00)

day11 1.Eclipse的基本使用 编译: 自动编译,在保存的那一刻(ctrl+s)帮你做好了(class文件出现在bin目录下) 2.Hierarchy 显示Java继承层次结构,选中类后F4 3.eclipse行号的显示与隐藏 4.D:字体大小及颜色 a:Java代码区域的字体大小和颜色: window -- Preferences -- General -- Appearance -- Colors And Fonts -- Java修改 -- Java Edit Text Font

Java多线程学习(吐血超详细总结)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程

Spring多线程

Spring是通过TaskExecutor任务执行器来实现多线程和并发编程的.使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor.而实际开发中任务一般是非阻碍的,即异步的,所以我们要在配置类中通过@EnableAsync开启对异步的支持,并通过在实际执行的Bean的方法中使用@Async注解来声明其是一个异步任务. 实例代码: (1)配置类 package com.lwh.highlight_spring4.ch3.taskexecutor; /**

python进阶学习(一)--多线程编程

1. 多线程 概念:简单地说操作系统可以同时执行多个不用程序.例如:一边用浏览器上网,一边在听音乐,一边在用笔记软件记笔记. 并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任务"一起"执行(实际上总有一些任务不在执行,因为切换任务的熟度相当快,看上去一起执行而已) 并行:指的是任务数小于等于CPU核数,即任务真的是一起执行的. 2. 线程 概念:线程是进程的一个实体,是CPU调度和分派的基本单位. threading--单线程执行: 1 import ti

多线程的实现及其安全问题

一.进程和线程概述 1.进程:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动,简单来说开启一个程序就开启了一个进程: 如果开启多个进程,它们之间是由于CPU的时间片在相互的切换: 2.线程:开启一个进程的一个任务,对于多线程:每一个线程都在争夺CPU的执行权(CPU的执行权具有随机性): 如果一个程序的执行路径有多条,那么该线程是多线程;反之,就单线程线程:线程是依赖于进程存在的! 3.Jvm是多线程 -- 至少开启了两条线程 main方法 主线程 gc() 垃圾回收线程 二.多线程