• threading多线程


    什么是线程?

    线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。一个进程中可以包含多个线程。

     1 import threading
     2 import time
     3 begin = time.time()
     4 def f1(a,b):
     5     print("f1",a,b)
     6     time.sleep(2)
     7 def f2(a,b,c):
     8     print("f2",a,b,c)
     9     time.sleep(3)
    10 t1 = threading.Thread(target=f1,args=(1,1))
    11 t2 = threading.Thread(target=f2,args=(2,2,2))
    12 t1.start()
    13 t2.start()
    14 end = time.time()
    15 print(end-begin)

    用过上述的代码实现了三条(加上主线程)线程的“并行”。

    线程的创建

      t1 = threading.Thread(target=f1,args=(1,1)) 其中target是目标函数,无括号。args传入变量。

      t1.start()表示激活这个线程。

    .join 和 setdeamon

      t1.join必须在start之后加入,表示主线程必须等待该子线程运行完之后再结束。

      t1.setDaemon(True) 必须在start之前加入。表示主线程不在等待此子线程而结束。但是必须等待其他子线程结束。

    其他内容

      线程之间数据相互影响,但是进程之间完全独立。

      由于cpython解释器存在的global interpreter lock使得每个进程一次只能解释一个线程。所以Python没有实现真正意义上的并行(多核处理同时多个线程)。

      线程分为IO密集型和计算密集型。由于GIL的存在Python在处理多个计算密集型线程时比不用多线程用时更长。(抢夺CPU资源)在3.5优化后好很多。

      解决办法:1.多个进程(会复制一个主进程内存爆炸)2.协程等。3.其他语言。

  • 相关阅读:
    HTTP 协议详解
    SQL中Group By的使用
    转mysql 多表 update sql语句总结
    数据库SQL优化大总结之 百万级数据库优化方案
    PHP中include和require的区别详解
    【奇怪的知识二】:部分测试名词解释
    【python】UI自动化测试浏览器内部命令模拟F12
    【python】pip设置永久阿里云镜像源
    【奇怪的知识一】:网页缓存清理
    【python】脚本输出接口json数据为表格
  • 原文地址:https://www.cnblogs.com/khal-Cgg/p/5920184.html
Copyright © 2020-2023  润新知