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. yield 举例

    示例代码: 神奇的地方在于yield返回的是一个IEumerable,可以直接枚举. // yield-example.cs using System; using System.Collection ...

  2. 源码分析八(org.springframework.util包之StringUtils类))

    一:spring框架util包中的StringUtils类主要是处理关于字符串 的功能方法,下面直接结合代码分析: //判断字符串是否为空,如果为nul或者""则返回true,否则 ...

  3. springboot+jps+druid项目搭建

    pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...

  4. [Object Tracking] Identify and Track Specific Object

    Abstract—Augmented Reality (AR) has become increasingly popular in recent years and it has a widespr ...

  5. Oracle的闪回技术--闪回已删除的表

    注意闪回技术只能保护非系统表决空间中的表,而且表空间必须本地管理, 外键将不可以被恢复, 索引和约束的名字将会被命名为以BIN开头,由系统生成的名字 查看是否开启闪回: SQL> show pa ...

  6. DOM的学习

    今天学习了DOM,感觉学习起来真的没那么简单啦,这不是一个好现象啊,只有依靠自己大补课,嘿嘿,具体的总结了一下,今天学习的其实并不多,仅仅学习了不同的节点类型,但是知识还是蛮碎的,要一点一点的总结,昨 ...

  7. js for循环与for in循环的区别

    for循环可一遍历数组,而for in循环可以遍历数组和对象 使用for in循环会将Array当成对象遍历,而Array的存取速度明显比Object要快.所以使用for循环遍历数组比for in循环 ...

  8. C++程序中调用其他exe可执行文件方法

    在编程过程中有个需求,点击某个按钮需要弹出系统的声音控制面板.在网上查了下代码中调用其他exe程序或者打开其他文件的方法. 自己借鉴网上的文章稍微总结下,加深下印象,也给方便自己用. 在代码中调用其他 ...

  9. Android中Adapter总结

    根据一个制作列表的程序开始练手,结果就出现了学习安卓的第一个代码问题 运行程序发现,虽然报错,但是可以成功运行程序. Android中Adapter功能为 显示ListView,最常用的有ArrayA ...

  10. Android开发训练之第五章第五节——Resolving Cloud Save Conflicts

    Resolving Cloud Save Conflicts IN THIS DOCUMENT Get Notified of Conflicts Handle the Simple Cases De ...