python基础知识~多线程

一 分类
   伪并发 由于执行速度很快,用户感知不到
   真并发 同时发起并发
   1 python调用的是操作系统的进程和线程,自身没有
    2 一个应用程序默认只有一个进程(可以定义多个) 一个进程只有一个线程(可以定义多个)
二 线程
   1 python的多线程分为主线程和其他线程.主进程会在多个线程进行来回切换处理
   2 python的线程是工作的最小单元
   3 python的线程共享进程中的所有资源
   4 python无法利用多核CPU实现多线程的,因为有锁的存在,同一时间只能cpu调用一个线程
三 进程
  1 独立开辟内存,能同时利用多核cpu
  2 耗费资源单进程多线程的场景
  3 如果主线程停止,那么所有子线程都要终止
四 第一种调用方式
    threading模块
    import threading
    def func(args):
    t=threading.current_thread()
    print(t)
    t1=threading.Thread(target=func函数,args=(11,)) 
    t1.setDaemon(True)
    t1.setname()
    t1.start()
    t1.join()
    t2=threading.Thread(target=func函数,args=(11,))//子线程t2
    t1.setDaemon(True)
    t2.start()
    t2.join()
 五  第二种调用方式
   import threading
   class mythread(threading.Thread):// threading.Thread这里直接继承,省去了上面的第一步
   def func(self,num):
     print(num)
   t1=mythread()
   t1.func(11)
   t2=mythread()
   t2.func(123)
六 相关函数
 1 threading.Thread(target=函数对象,args=参数)生成的对象调用以下
    1 start():启动线程活动等待,cpu会调用.注意这里并不是表示线程的开始。
    2 join([time]):
      主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),那么,主线程A会在调用的地方等待,直到子线程B完成操作后才可以接着往下执行,那么在调用这个线程时可以使用被调用线程的join方法。
       join([timeout]) 里面的参数时可选的,代表线程运行的最大时间,即如果超过这个时间,不管这个此线程有没有执行完毕都会被回收,然后主线程或函数都会接着执行的,如果线程执行时间小于参数表示时间,则接着执行,不用一定要等待到参数表示的时间
      参数的主要意义代表主线程不会无限等待子线程,设置子线程的超时回收
    3  isAlive(): 返回线程是否活setDaemon()动的。
    4  getName(): 返回线程名。
    5  setName(): 设置线程名。
    6  setDaemon()方法。主线程A中,创建了子线程B,并且在主线程A中调用了B.,这个的意思是,把主线程A设置为守护线程,这时候,要是主线程A执行结束了,就不管子线程B是否完成,一并和主线程A退出.这就是setDaemon方法的含义,这基本和join是相反的,根本不会等待子线程。此外,还有个要特别       注意的:必须在start() 方法调用之前设置,如果不设置为守护线程,程序会被无限挂起,只有等待了所有线程结束它才结束。
  2  threading.event() 创建线程
  3  threading.current_thread() 获取当前线程
七 python多线程的锁
    GIL锁 全局解释器锁,用来限制同一个进程同一个时刻只有一个线程被cpu调用
    在Python多线程下,每个线程的执行方式:
   1、获取GIL
   2、执行代码直到sleep或者是python虚拟机将其挂起。
   3、释放GIL
   可见,某个线程想要执行,必须先拿到GIL,我们可以把GIL看作是“通行证”,并且在一个python进程中,GIL只有一个。拿不到通行证的线程,就不允许进入CPU执行。而每次释放GIL锁,线程进行锁竞争、切换线程,会消耗资源。并且由于GIL锁存在,python里一个进程永远只能同时执行一个线程(拿到 GIL的线程才能执行),这就是为什么在多核CPU上,python的多线程效率并不高。

原文地址:https://www.cnblogs.com/danhuangpai/p/10949938.html

时间: 2024-10-09 10:24:12

python基础知识~多线程的相关文章

python基础知识的学习和理解

参考链接:https://github.com/yanhualei/about_python/tree/master/python_learning/python_base python基础知识笔记 Flask aiohttp的学习和理解 assert() asyncio的学习和理解 continue_break学习和理解 cprofile代码效率分析 datatime dict字典学习与理解 django_project eval() filter() gevent协程的学习和理解 http服

python基础知识总结

python有段时间没用了,实在是惭愧啊,屌丝今天决定开始对python基础知识重新进行总结,以慰自心. 一.python概念 Python是著名的"龟叔"Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. python定位"优雅","简单","明确" 二.python安装 略 三.python基础 1.数据类型 整数: Python可以处理任意大小的整数,当然包括负整数,在程序

python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding:utf-8from com.wenhy.crawler_baidu_baike import url_manager, html_downloader, html_parser, html_outputer print "爬虫百度百科调度入口" # 创建爬虫类class SpiderMai

python基础知识(二)

以下内容,作为python基础知识的补充,主要涉及基础数据类型的创建及特性,以及新数据类型Bytes类型的引入介绍

python基础知识1

Python的基础知识: if-elif-else while-else break continue from..import import.. dir(),当提供一个模块明的时候,返回模块定义的名称列表 列表[],元祖(),字典{} 面向对象编程:self,__init__方法 try-except try-finally python的GUI库:Tkinter   床架一个root,把创建的其它元素放到root里面来 python基础知识1

python 基础知识(一)

                                       python 基础知识(一) 一.python发展介绍 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承.之所以选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者.Python是从ABC发展起来,主要受到了Modula-3(另一种相当

Python基础知识梳理 - 第01部分

在开始Python基础知识梳理前, 先安装下环境. 以下过程是在Linux操作系统, root用户下进行的, 主要安装了2.7版本的python, 和pip, ipython, virtualenv等工具, 最后是vim的设置. 1. 安装python. # wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz Python-2.7.14 # ./configure --prefix=/usr/local/python27

Python基础知识两部曲:二

如果没有看基础部分第一章,请前往Python基础知识两部曲:一 8.函数 1.定义函数: 使用关键字def来告诉python你要定义一个函数 接着指出函数名:如下面函数名是--greet_user ()是必须带上的,这里可以可以传递一些参数,也可以不传 以:结尾,且与后面所有的缩进构成了函数体 调用函数直接写上函数名,如果有参数记得带上参数 1. 无参数的函数: def greet_user(): """显示简单的函数体""" print(&qu

Python基础知识梳理 - 第02部分

本文是Python基础知识的第二篇, 主要是对内置对象类型的介绍, 涉及的类型如下表. 数字类型 在Python中, 数字并不是一个真正的对象类型, 而是一组类似类型的分类, 如整数和浮点数, 复数等. Python还提供了若干处理数字对象的工具, 如内置数学函数pow, abs等, 标准库math, random等. 看下数字的简单使用. In [15]: 123 + 234 Out[15]: 357 In [16]: 1.5 * 4 Out[16]: 6.0 In [32]: pow(2,