#练习:线程等待 Event e.set() e.wait()
from threading import Thread, Lock
import threading
import time
def wait_for_event(e):
#Wait for the event to be set before doing anything
print 'wait_for_event: starting'
e.wait() # 等待收到能执行信号,如果一直未收到将一直阻塞
print 'wait_for_event: e.is_set()->', e.is_set()
def wait_for_event_timeout(e, t):
#Wait t seconds and then timeout
print 'wait_for_event_timeout: starting'
e.wait(t)# 等待t秒超时,此时Event的状态仍未未设置
print 'wait_for_event_timeout: e.is_set()->', e.is_set()
e.set()# 设置Event的状态
if __name__ == '__main__':
e = threading.Event()
print "begin, e.is_set()", e.is_set()
w1 = Thread(name = 'block', target = wait_for_event, args = (e,))
w1.start()
w2 = Thread(name = 'nonblock', target = wait_for_event_timeout, args = (e, 2))
w2.start()
print 'main: waiting before calling Event.set()'
time.sleep(3)
# e.set()
print 'main: event is set'
#练习:condition 等待notify_all() notify()
import threading as tr
import time
def consumer(cond):
with cond:
print("consumer before wait")
cond.wait() # 等待消费
print("consumer after wait")
def producer(cond):
with cond:
print("producer before notifyAll")
cond.notify_all() # 通知消费者可以消费了
print("producer after notifyAll")
if __name__ == '__main__':
condition = tr.Condition()
t1 = tr.Thread(name = "thread-1", target = consumer, args=(condition,))
t2 = tr.Thread(name = "thread-2", target = consumer, args=(condition,))
t3 = tr.Thread(name = "thread-3", target = producer, args=(condition,))
t1.start()
time.sleep(2)
t2.start()
time.sleep(2)
t3.start()
#练习:线程队列 队列是一种数据结构
from threading import Thread
from Queue import Queue
import random, time
# 储钱罐
def create(queue):
for i in [100, 50, 20, 10, 5, 1, 0.5]:
if not queue.full():
queue.put(i) # 入队列
print 'Put %sRMB to queue.' %i
time.sleep(1)
# 取储钱罐中的零钱花
def get(queue):
while 1:
if not queue.empty():
print 'Get %sRMB from queue.' %queue.get()
time.sleep(2)
else:
break
if __name__=="__main__":
q = Queue() # 创建一个队列实例
create_t = Thread(target = create, args = (q,))
get_t = Thread(target = get, args = (q,))
create_t.start()
#time.sleep(1) #这里稳妥起见,最好是sleep1秒
get_t.start()
create_t.join()
get_t.join()
#练习:死锁 互相等,结果谁也等不到谁
import threading
import time
#声明全局锁 不用global直接用
lock1 = threading.Lock()
lock2 = threading.Lock()
print lock1, lock2
class T1(threading.Thread):
def __init__(self, name):
threading.Thread.__init__(self)
self.t_name = name
def run(self):
lock1.acquire()
time.sleep(1)#睡眠的目的是让线程2获得调度,得到第二把锁
print 'in thread T1',self.t_name
time.sleep(2)
lock2.acquire() #线程1请求第二把锁
print 'in lock l2 of T1'
lock2.release()
lock1.release()
class T2(threading.Thread):
def __init__(self, name):
threading.Thread.__init__(self)
self.t_name = name
def run(self):
lock2.acquire()
time.sleep(2)#睡眠的目的是让线程1获得调度,得到第一把锁
print 'in thread T2',self.t_name
lock1.acquire() #线程2请求第一把锁
print 'in lock l1 of T2'
lock1.release()
lock2.release()
def test():
thread1 = T1('A')
thread2 = T2('B')
thread1.start()
thread2.start()
if __name__== '__main__':
test()
- python多线程学习记录
1.多线程的创建 import threading t = t.theading.Thread(target, args--) t.SetDeamon(True)//设置为守护进程 t.start() ...
- python多线程编程
Python多线程编程中常用方法: 1.join()方法:如果一个线程或者在函数执行的过程中调用另一个线程,并且希望待其完成操作后才能执行,那么在调用线程的时就可以使用被调线程的join方法join( ...
- Python 多线程教程:并发与并行
转载于: https://my.oschina.net/leejun2005/blog/398826 在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global int ...
- python多线程
python多线程有两种用法,一种是在函数中使用,一种是放在类中使用 1.在函数中使用 定义空的线程列表 threads=[] 创建线程 t=threading.Thread(target=函数名,a ...
- python 多线程就这么简单(转)
多线程和多进程是什么自行google补脑 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用简单的例子,让你对多线程有个初步的认识. 单线程 在好些年前的 ...
- python 多线程就这么简单(续)
之前讲了多线程的一篇博客,感觉讲的意犹未尽,其实,多线程非常有意思.因为我们在使用电脑的过程中无时无刻都在多进程和多线程.我们可以接着之前的例子继续讲.请先看我的上一篇博客. python 多线程就这 ...
- python多线程监控指定目录
import win32file import tempfile import threading import win32con import os dirs=["C:\\WINDOWS\ ...
- python多线程ssh爆破
python多线程ssh爆破 Python 0x01.About 爆弱口令时候写的一个python小脚本,主要功能是实现使用字典多线程爆破ssh,支持ip表导入,字典数据导入. 主要使用到的是pyth ...
- 【python,threading】python多线程
使用多线程的方式 1. 函数式:使用threading模块threading.Thread(e.g target name parameters) import time,threading def ...
- <转>Python 多线程的单cpu与cpu上的多线程的区别
你对Python 多线程有所了解的话.那么你对python 多线程在单cpu意义上的多线程与多cpu上的多线程有着本质的区别,如果你对Python 多线程的相关知识想有更多的了解,你就可以浏览我们的文 ...
随机推荐
- DOM与document的区别
DOM: DOM 全称是 Document Object Model,也就是文档对象模型. DOM 就是针对 HTML 和 XML 提供的一个API.什么意思?就是说为了能以编程的方法操作这个 HTM ...
- python-flask-Flask-SQLAlchemy与Flask-Migrate联合进行数据化迁移
使用步骤: 1. 引入Flask-SQLAlchemy from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() 2. 注册 Flask-SQ ...
- ThinkPHP3的使用
1. 初始目录 7d 根目录 ├─Application 应用目录(空) ├─Public 资源文件目录 ├─ThinkPHP 框架目录 └─index.php 入口文件 2. 入口文件 // 应用入 ...
- python3 get/post/使用代理/自定义header/自定义Cookie
说明:urllib发送http请求并不是很人性化,更推荐使用在urllib基础上封装的.python2和python3都兼容的requests模块,移步查看. 一.get请求 get请求就是在构造Re ...
- weex npm 报错 cb() never called!
安装环境:windows7 使用npm 安装 出现错误后网上查找并没有解决,在准备放弃的时候试着用cnpm安装了一下,结果安装成功了,感觉应该网络问题,不知原因但完美解决
- [IOS微信] 查看微信原始数据(含沙盒中的数据)
1.下载PP助手,将苹果手机连接到电脑上, 2.备份数据 备份还原——备份数据——全新备份 3.导出数据 备份还原——还原数据,在右边的列表中找到备份记录,点击“查看”, 在弹出窗口的右侧,找到“Ap ...
- oo作业总结(二)
概述 和前三次作业相比,这几次作业最大的不同是难度的飞跃.遗憾的是在这难度的变化面前,我自己却没有做好充分的准备,错误的低估了作业难度导致给自己带来了很多不必要麻烦和损失.接下来我将对它们进行说明(度 ...
- Mysql 实列结构-进程
一.MySQL后台进程简介 master thread与四大I/O线程:read thread.write thread.redo log thread.change buffer thread与 p ...
- 【转】用深度学习做crowd density estimation
本博文主要是CVPR2016的<Single-Image Crowd Counting via Multi-Column Convolutional Neural Network>这篇文章 ...
- Hibernate多对多映射(双向关联)实例详解——真
一个学生可以选多门课 一门课程有多个学生上 实现步骤: 一.学生 (1)数据库创建学生数据表students,包含id,name字段 设置id字段为主键,类型:bigint,自增 设置name字段,类 ...