进程与线程

线程(Thread)是计算机运算调度的最小单位,它存在于进程中,是实际运作单位。每个进程都可能并发多线程。

  每一个程序的内存是独立的。

  线程:是操作系统最小的运算调度单位,是一串指令的集合。

  所有在同一进程里的线程是共享同一块内存空间,而多线程抢同一资源时会出现问题。

  第一个创建的线程为主线程,但主线程和子线程之间没有任何隶属关系的,这与主进程子进程不一样

进程:一个程序执行的实例(应用程序)就被称为一个进程。要以一个整体形势暴露给操作系统来管理,里面包含对各种资源的调用,内存的对各种资源管理的结合,就可以成为进程。

进程和线程的区别:

  1.  线程共享内存空间,进程的内存是独立的

  2.  子线程共享内存空间,多子进程的资源都是相同的COPY,是独立而不是共享的。

  3.  同一进程长得线程之间可以直接交流,两个进程之间如果要通信,必须通过一个中间代理来实现

  4.  创建新线程很简单,创建新进程需要对其父进程进行一次克隆

  5.  一个线程可以控制和操作同一进程里的其他线程,但进程只能操作子进程

  6.  对主线程的修改有可能会影响其他线程的运行,但对父进程的修改,不会影响其他子进程的运行

  7.  主线程关闭,不会影响其他子线程运行,主进程关闭,子进程也会结束。

  线程类继承threading.Thread

  等待线程结束:t.join()

  将子线程设置为守护线程:t.setDaemon(True)

  主线程退出,子线程便都退出了

全局解释器锁gil:多核的机器,可以真正同时并发

       但是在C-Python中,实际只是一核在运算,调用操作系统的原生线程,只有同一时间可以拿到数据,实际以单核执行

  Python将来使用pyty技术,会速度非常快。去掉全局解释器锁,加入了Justruntime,即时编译,边编译边执行,提前预编译一部分。

如果程序间需要锁套锁,需要使用递归锁的概念,Rlock

  

信号量:相当于房间的门,有多个,每个有一个锁,出来一个可以再进去一个

  event=threading.event()

  事件的方法:

  set()

  is_set()

  clear()

  wait()

  红绿灯实例:

  

# Author:huhu
import threading
import time event = threading.Event()
def lighter():
count=0
event.set()
while True:
if count>=5 and count<10:#改成红灯
event.clear() #把标志位清空了
print("\033[41;1mred light is on...\033[0m")
elif count>10:
event.set()
count=0
else:
print("\033[42;1mgreen light is on...\033[0m")
time.sleep(1)
count+=1 def car(name):
while True:
if event.is_set():
print("[%s] is running..."%name)
time.sleep(1)
else:
print("[%s] sees red light...waiting..."% name)
event.wait()
print("\033[34;1m[%s] green light is on,start running.\033[0m"% name) light = threading.Thread(target=lighter,)
light.start() car1 = threading.Thread(target=car,args=("Tesla",))
car1.start() 重点知识之queue队列: 可理解为一个存放数据的容器,
class queue.Queue(maxsize=0)      #先入先出
class queue.LifoQueue(maxsize=0)    #后入先出
class queue.PriorityQueue(maxsize=0)  #存储数据时可设置优先级的队列

 重要的作用:

1  完成对程序解耦

2  提高运行效率 

 利用多线程和队列做一个生产者消费者多并发模型实例:详见20180810

本周作业:

开3个不同,主机用户名不同

简单主机批量管理:

主机列表

1 exec cmd

2 send file

每个操作是每台主机都做相同的操作

  

  

   

  

Python3.5 学习九的更多相关文章

  1. python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法

    python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法 同一台机器同时安装 python2.7 和 python3.4不会冲突.安装在不同目录,然 ...

  2. python3.4学习笔记(九) Python GUI桌面应用开发工具选择

    python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者http://www.admin10000.com/document/96 ...

  3. python3.4学习笔记(四) 3.x和2.x的区别,持续更新

    python3.4学习笔记(四) 3.x和2.x的区别 在2.x中:print html,3.x中必须改成:print(html) import urllib2ImportError: No modu ...

  4. python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容

    python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...

  5. python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容

    python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI,采用Python语言编写 ...

  6. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  7. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

  8. python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码

    python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...

  9. python3.4学习笔记(二十五) Python 调用mysql redis实例代码

    python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...

随机推荐

  1. gdb 调试带参数程序

    在gdb中,运行程序使用r或是run命令. 程序的运行,你有可能需要设置下面四方面的事. 1.程序运行参数. set args 可指定运行时参数.(如:set args 10 20 30 40 50) ...

  2. AJAX 请求中多出了一次 OPTIONS 请求 导致 Laravel 中间件无法对 Header 传入的 Token 无法获取

    背景知识: 我们会发现,在很多post,put,delete等请求之前,会有一次options请求.本文主要是来讨论一下这是什么原因引起的. 根本原因就是,W3C规范这样要求了!在跨域请求中,分为简单 ...

  3. $.post 提示错误: Uncaught SyntaxError: Unexpected token :

    $.post("addRecommond",{"productId":productId,"categoryCode":categoryCo ...

  4. highcharts点击事件系列

    http://www.highcharts.com/demo/line-ajax 参考设置(bar 柱状图) plotOptions: {                series: {       ...

  5. 构造函数constructor 与析构函数destructor(一)

    构造函数定义:构造函数c++中在创建对象时自动调用,用来初始化对象的特殊函数. (1)构造函数的名字必须与类的名字相同,不能有返回值,哪怕是void 也不行. (2)通常情况下构造函数应声明为公有函数 ...

  6. 20155233 2016-2017-2 《Java程序设计》第8周学习总结

    20155233 2016-2017-2 <Java程序设计>第8周学习总结 学习目标 了解NIO 会使用Channel.Buffer与NIO2 会使用日志API.国际化 会使用正则表达式 ...

  7. 2018.10.20 NOIP模拟 巧克力(trie树+dfs序+树状数组)

    传送门 好题啊. 考虑前面的32分,直接维护后缀trietrietrie树就行了. 如果#号不在字符串首? 只需要维护第一个#前面的字符串和最后一个#后面的字符串. 分开用两棵trie树并且维护第一棵 ...

  8. Yii框架请求

    $request = Yii::$app->request; $get = $request->get(); // 等价于: $get = $_GET; $id = $request-&g ...

  9. java报错java/lang/NoClassDefFoundError: java/lang/Object

    安装完java出错 javac和java -version 都无效,报错如上 解决方法,更改文件中的两个文件(前提是你的 vim  /etc/profile  文件路径写的正确) /usr/java/ ...

  10. HDU 1061 Rightmost Digit (快速幂取模)

    题意:给定一个数,求n^n的个位数. 析:很简单么,不就是快速幂么,取余10,所以不用说了,如果不会快速幂,这个题肯定是周期的, 找一下就OK了. 代码如下: #include <iostrea ...