博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python学习笔记14:多线程
阅读量:6631 次
发布时间:2019-06-25

本文共 2082 字,大约阅读时间需要 6 分钟。

进程 vs 线程

  • 进程: 程序运行的一个状态
    • 包含地址空间,内存,数据栈等
    • 每个进程由自己完全独立的运行环境,多进程共享数据是一个问题
  • 线程
    • 一个进程的独立运行片段,一个进程可以由多个线程组成
    • 轻量化的进程,主从关系
    • 一个进程的多个现成间共享数据和上下文运行环境
    • 共享互斥问题
  • 全局解释器锁(GIL)
    • Python代码的执行是由python虚拟机进行控制
    • 在主循环中只能更有一个控制线程在执行
  • 参考资料
    • 多线程

    • 为了提高cpu等速度快的资源的使用率,加快程序相应速度
    • python目前常用的包为 threading
      • threading的使用
        • 直接利用threading.Thread生成Thread实例
          1. t = threading.Thread(target=xxx, args=(xxx,))
          2. t.start():启动多线程
          3. t.join(): 等待多线程执行完成
          4. 案例04
          5. 案例05: 加入join后比较跟案例04的结果的异同
#利用time延时函数,生成两个函数# 利用多线程调用# 计算总运行时间# 练习带参数的多线程启动方法import time# 导入多线程处理包import threadingdef loop1(in1):    print('Start loop 1 at :', time.ctime())    print("我是参数 ",in1)    time.sleep(4)    print('End loop 1 at:', time.ctime())def loop2(in1, in2):    print('Start loop 2 at :', time.ctime())    print("我是参数 " ,in1 , "和参数  ", in2)    time.sleep(2)    print('End loop 2 at:', time.ctime())def main():    print("Starting main at:", time.ctime())    # 生成threading.Thread实例    t1 = threading.Thread(target=loop1, args=("王老大",))    t1.start()    t2 = threading.Thread(target=loop2, args=("王大鹏", "王小鹏"))    t2.start()    t1.join()    t2.join()    #等待线程执行完成,才执行下一个    print("All done at:", time.ctime())if __name__ == "__main__":    main()    # 一定要有while语句    # 因为启动多线程后本程序就作为主线程存在    # 如果主线程执行完毕,则子线程可能也需要终止  #  while True:  #      time.sleep(10)
  • 守护线程-daemon

    • 如果在程序中将子线程设置成守护线程,则子线程会在主线程结束的时候自动退出
    • 设置依据:守护线程不重要或者不允许离开主线程独立运行
    • 使用:线程实例名.setDaemon(true)---t1.setDaemon(True),或t1.daemon = True,要求在启动前设置
    • 守护线程案例能否有效果跟环境相关
    • 案例:
    import timeimport threading

def fun():

print("Start fun")
time.sleep(2)
print("end fun")

print("Main thread")

t1 = threading.Thread(target=fun, args=() )

设置守护线程的方法,必须在start之前设置,否则无效

t1.setDaemon(True)

#t1.daemon = True
t1.start()

time.sleep(1)

print("Main thread end")

- 线程常用属性   -  threading.currentThread:返回当前线程变量   - threading.enumerate:返回一个包含正在运行的线程的list,正在运行的线程指的是线程启动后,结束前的状态   - threading.activeCount: 返回正在运行的线程数量,效果跟 len(threading.enumerate)相同   - thr.setName: 给线程设置名字   - thr.getName: 得到线程的名字  - 直接继承自threading.Thread       - 直接继承Thread       - 重写run函数       - 类实例可以直接运行       - 案例09       - 案例10, 工业风案例

转载于:https://blog.51cto.com/14083201/2342938

你可能感兴趣的文章
SSM整合,个人总结和step
查看>>
嵌入式Linux ARM汇编(三)——ARM汇编指令(四)
查看>>
嵌入式 Linux 系统移植——BSP分析
查看>>
Linux-基础命令测试(一)
查看>>
利用 onload 事件监控跨站资源
查看>>
[译]你真的了解外边距折叠吗
查看>>
Maven整合eclipse
查看>>
RFM模型——构建数据库营销的商业战役!(转)
查看>>
C#2.0 委托
查看>>
C语言基础知识【判断】
查看>>
linux和window双系统下修改系统启动项
查看>>
POJ 2195 Going Home【二分图最优匹配.KM】
查看>>
jQuery清空表单方法
查看>>
k8s sidecar, Ambassador, Adapter containers
查看>>
C#生成不重复的随机数(转)
查看>>
gulp+sass+react前端开发,环境搭建
查看>>
CNN卷机网络在自然语言处理问题上的应用
查看>>
Java文件操作①——XML文件的读取
查看>>
Linq快速入门——Lambda表达式的前世今生
查看>>
Quick Sort 快速排序的原理及实现
查看>>