2018-7-20 18:46:49 去俺弟家玩去 后天回来

1.复习

# !/usr/bin/env python
# !--*--coding:utf-8 --*--
# !@Time :2018/7/20 8:56
# !@Author TrueNewBee # 正确的学习方法
# input
# output
# correct 纠正 # 线程:
# 1.线程是进程中的执行单位
# 2.线程是cpu执行的最小单位
# 3.线程之间资源共享
# 4.线程的开启和关闭以及切换的时间开销远远小于进程
# 5.线程本身可以在同一时间使用多个cpu
# python 与 线程
# CPython解释器在解释代码过程中容易产生数据不安全的问题
# GIL全局解释器锁 锁的是线程
# threading

2.守护线程

# !/usr/bin/env python
# !--*--coding:utf-8 --*--
# !@Time :2018/7/20 9:04
# !@Author TrueNewBee
import time
from threading import Thread def func1():
while True:
print('*'*10)
time.sleep(1) def func2():
print('in func2')
time.sleep(5) if __name__ == '__main__':
t = Thread(target=func1, )
t.daemon = True
t.start()
t2 = Thread(target=func2, )
t2.start()
t2.join()
print('主线程') # 守护进程随着主进程代码的结束而结束(进程间资源不共享,所以想咋结束咋结束)
# 守护线程会在主线程结束之后等待其他子线程的结束才结束(线程间资源共享,所以不能主线程不能立马结束) # 主进程在执行完自己的代码之后不会立即结束,而是等待子进程结束之后 挥手子进程的资源 # import time
# from multiprocessing import Process
#
#
# def func():
# time.sleep(5)
#
#
# if __name__ == '__main__':
# Process(target=func, ).start()

3.锁

# !/usr/bin/env python
# !--*--coding:utf-8 --*--
# !@Time :2018/7/20 9:29
# !@Author TrueNewBee
# import time
# from threading import Thread, Lock # def func(lock1):
# global n
# lock1.acquire() # 加上一个锁
# # n = 1 python内部就是下面执行的
# temp = n
# time.sleep(0.2)
# n = temp - 1 # 9 刚取回来还没来得及赋值又被别人拿走了,所以得自己加个锁不让被人拿走
# lock1.release() # 换钥匙
#
#
# n = 10
# t_list = []
# lock = Lock()
# for i in range(10):
# t = Thread(target=func, args=(lock, ))
# t.start()
# t_list.append(t)
# for t in t_list:
# t.join()
# print(n) # 不加锁是9 加锁是 0 # 科学家吃面问题 经典死锁问题
# noodle_lock = Lock()
# fork_lock = Lock()
# 互斥锁
#
#
# def eat1(name):
# noodle_lock.acquire()
# print('%s拿到面条啦' % name)
# fork_lock.acquire()
# print('%s拿到叉子啦' % name)
# print('%s吃面' % name)
# fork_lock.release()
# noodle_lock.release()
#
#
# def eat2(name):
# fork_lock.acquire()
# print('%s拿到叉子啦' % name)
# time.sleep(1)
# noodle_lock.acquire()
# print('%s拿到面条啦' % name)
# print('吃面')
# noodle_lock.release()
# fork_lock.release()
#
#
# if __name__ == '__main__':
# Thread(target=eat1, args=('alex', )).start()
# Thread(target=eat2, args=('Egon',)).start()
# Thread(target=eat1, args=('bossJin',)).start()
# Thread(target=eat2, args=('zeZha',)).start()
import time
from threading import RLock, Thread fork_lock = noodle_lock = RLock() # 一个钥匙串上的两把钥匙
# 递归锁 为了解决死锁问题,可以acquire()多次, def eat1(name):
noodle_lock.acquire() # 一把钥匙
print('%s拿到面条啦' % name)
fork_lock.acquire()
print('%s拿到叉子啦' % name)
print('%s吃面' % name)
fork_lock.release()
noodle_lock.release() def eat2(name):
fork_lock.acquire()
print('%s拿到叉子啦' % name)
time.sleep(1)
noodle_lock.acquire()
print('%s拿到面条啦' % name)
print('%s吃面' % name)
noodle_lock.release()
fork_lock.release() if __name__ == '__main__':
Thread(target=eat1, args=('alex', )).start()
Thread(target=eat2, args=('Egon',)).start()
Thread(target=eat1, args=('bossJin',)).start()
Thread(target=eat2, args=('zeZha',)).start()

4.条件和定时器

# !/usr/bin/env python
# !--*--coding:utf-8 --*--
# !@Time :2018/7/20 11:25
# !@Author TrueNewBee
import time
from threading import Semaphore, Thread def func(sem1, a, b):
# 同一时间就让四个线程执行代码
sem1.acquire()
time.sleep(1)
print(a+b)
sem1.release() if __name__ == '__main__':
sem = Semaphore(4)
for i in range(10):
t = Thread(target=func, args=(sem, i, i+5))
t.start()

5.事件

# !/usr/bin/env python
# !--*--coding:utf-8 --*--
# !@Time :2018/7/20 11:31
# !@Author TrueNewBee
# 事件被创建的时候
# False状态
# wait() 阻塞
# True状态
# wait() 非阻塞
# clear 设置状态为False
# set 设置状态为True # 数据库- 文件夹
# 文件夹里有好多excel表格
# 1.能够更方便的对数据进行增删改查
# 2.安全访问的机制 # 伪代码 看现象:
# 起两个线程
# 第一个线程:连接数据库
# 等待一个信号,告诉我我们之间的网络是通的
# 连接数据库
# 第二个线程:检测与数据库之间的网络情况是否连通
# time.sleep(0,2)
# 将事件状态设置为True import time
import random
from threading import Thread, Event def connect_db(e1):
count = 0
while count < 3:
# 连接三次
e1.wait(0.5) # 状态是False的时候,我只等待1s
if e1.is_set() == True:
print('连接成功')
break
else:
count += 1
print('第%s次连接失败' % count)
else:
# 连接三次都都没连上,主动抛出异常
raise TimeoutError('数据库连接超时') def check_web(e2):
time.sleep(random.randint(0, 3))
e2.set() if __name__ == '__main__':
e = Event()
t1 = Thread(target=connect_db, args=(e, ))
t2 = Thread(target=check_web, args=(e, ))
t1.start()
t2.start()

7.20 python线程3的更多相关文章

  1. [python] 线程锁

    参考:http://blog.csdn.net/kobeyan/article/details/44039831 1. 锁的概念 在python中,存在GIL,也就是全局解释器锁,能够保证同一时刻只有 ...

  2. [python] 线程简介

    参考:http://www.cnblogs.com/aylin/p/5601969.html 我是搬运工,特别感谢张岩林老师! python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件 ...

  3. Python 线程(threading) 进程(multiprocessing)

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  4. [python] ThreadPoolExecutor线程池 python 线程池

    初识 Python中已经有了threading模块,为什么还需要线程池呢,线程池又是什么东西呢?在介绍线程同步的信号量机制的时候,举得例子是爬虫的例子,需要控制同时爬取的线程数,例子中创建了20个线程 ...

  5. Python学习——Python线程

    一.线程创建 #方法一:将要执行的方法作为参数传给Thread的构造方法 import threading import time def show(arg): time.sleep(2) print ...

  6. python——线程相关

    使用python的threading中的Thread 下面是两种基本的实现线程的方式: 第一种方式———— #coding=utf-8 """ thread的第一种声明及 ...

  7. python 线程,GIL 和 ctypes(转)

    原文:http://zhuoqiang.me/python-thread-gil-and-ctypes.html GIL 与 Python 线程的纠葛 GIL 是什么东西?它对我们的 python 程 ...

  8. python 线程、多线程

    复习进程知识: python:主进程,至少有一个主线程 启动一个新的子进程:Process,pool 给每一个进程设定一下执行的任务:传一个函数+函数的参数 如果是进程池:map函数:传入一个任务函数 ...

  9. python 线程 进程 协程 学习

    转载自大神博客:http://www.cnblogs.com/aylin/p/5601969.html 仅供学习使用···· python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和 ...

随机推荐

  1. 如果你的eclipse在每次run或debug时都莫名其妙的做一件事

    新项目,使用Ant打war包.结果写完了Ant以后,包是打好了,却使eclipse以后每次run或debug时都莫名其妙地自动先执行这个Ant, 让人十分苦恼. 其实,是你的eclipse设置出了问题 ...

  2. 五大行获央行5000亿SLF 相当于降准0.5%

    人民网北京9月17日电 (吕骞)据新浪财经报道,9月16日收盘后,市场传央行当天对五大行进行5000亿SLF操作,性质类同基础货币的投放,近似全面降准0.5个百分点.国泰君安.国信等数家机构晚间证实传 ...

  3. 架构设计:系统存储(28)——分布式文件系统Ceph(挂载)

    (接上文<架构设计:系统存储(27)--分布式文件系统Ceph(安装)>) 3. 连接到Ceph系统 3-1. 连接客户端 完毕Ceph文件系统的创建过程后.就能够让客户端连接过去. Ce ...

  4. ios开发之--调试方法

    概述 基本操作 全局断点 条件断点 开启僵尸对象 LLDB命令 概述 在开发项目的工程中,肯定会遇到各种各样的bug,且大多数的bug都和自己有关:那么在和bug斗智斗勇的过程中,如果能快速准确的一击 ...

  5. zabbix创建触发器

    1. 增加触发器 配置-->主机-->选择主机-->创建触发器 2. 配置触发器 3.查看触发器的状态 如果有问题会显示红色的问题

  6. cannot access android.support.v4.app.BaseFragmentActivityJB的解决

    //implementation 'com.android.support:appcompat-v7:26.1.0' 改成implementation 'com.android.support:app ...

  7. JSP基本用法(二)隐含对象

    一.摘要 在JSP容器中生成的Servlet类的_jspService()方法中,定义了几个对象,在编写JSP页面时我们可以使用这些隐含对象. PageContext pageContext = nu ...

  8. Bypassing PatchGuard on Windows x64

    [说明] 1.  本文是意译,加之本人英文水平有限.windows底层技术属菜鸟级别,本文与原文存在一定误差,请多包涵. 2.  由于内容较多,从word拷贝过来排版就乱了.故你也可以下载附件. 3. ...

  9. 七、K3 WISE 开发插件《Update字段级更新触发器 - BOS单审核后反写源单》

    审核成功触发,是一个比较典型的场景.需要用到update触发器,跟踪到审核状态的变化. 引用的源码<采购检验单审核后反写收料通知单>,其中采购检验单是BOS自定义单据. if (objec ...

  10. Ubuntu 16.04 LAMP server tutorial with Apache 2.4, PHP 7 and MariaDB (instead of MySQL)

    https://www.howtoforge.com/tutorial/install-apache-with-php-and-mysql-on-ubuntu-16-04-lamp/ This tut ...