PYTHON学习之路_PYTHON基础(10)
学习内容:
Python进程与线程
1、线程及线程类
2、线程守护
3、线程等待
4、线程锁
5、信号量
6、timer用法
7、队列
8、事件驱动
9、生产者消费者模型
10、进程及进程同步
11、进程池
12、递归锁
13、进程间通讯
一、线程及线程类
import threading
import time class MyThread(threading.Thread):
def __init__(self,num):
threading.Thread.__init__(self)
self.num = num def run(self):
print ('running on number :%s'%self.num)
print ('threading_act',threading.active_count() )
print ('threading_cur:',threading.current_thread())
time.sleep(3) if __name__ == '__main__':
t1 = MyThread('alex')
t2 = MyThread('json')
t1.start()
t2.start()
print (t1.getName())
print (t2.getName())
print('threading_c:', threading.current_thread())
二、线程守护
import threading
import time def run(n):
time.sleep(1)
print ("thread",n)
t_list = []
for i in range(10):
t = threading.Thread(target=run,args=(i,))
t.setDaemon(True)
t.start()
t_list.append(t)
print (t_list)
print ('----main thread----')
三、线程等待
import threading
import time
def run(n):
time.sleep(1)
print ("thread",n)
t_list = []
for i in range(10):
t = threading.Thread(target=run,args=(i,))
t.start()
t_list.append(t)
for t in t_list:
print ('t_list:',t)
t.join() #t.wait
print ('----main thread----')
四、线程锁
import threading
import time l = threading.Lock()
def run(n):
global num
l.acquire() #获取锁
num += 1
time.sleep(1)
l.release() #释放锁
print(num)
time.sleep(1)
#print("thread",n)
def run2():
count = 0
while num < 9:
print ('---------',count)
count += 1
num = 0
t_list = []
for i in range(10):
t = threading.Thread(target=run, args=(i,))
t.start()
t_list.append(t)
t2 = threading.Thread(target=run2)
t2.start()
for t in t_list:
t.join()
print("--main thread---")
print(num)
五、信号量(多线程)
import threading, time def run3(n):
semaphore.acquire()
time.sleep(1)
print('--------between run1 and run2-----',n)
semaphore.release()
if __name__ == '__main__':
num, num2 = 0, 0
semaphore = threading.BoundedSemaphore(5)
for i in range(20):
t = threading.Thread(target=run3,args=(i,))
t.start()
while threading.active_count() != 1:
pass
#print('active_count',threading.active_count())
else:
print('----all threads done---')
print(num, num2)
六、timer用法
import threading
import time
def hello():
print("hello, world")
t1 = time.time()
t = threading.Timer(3.0, hello)
t.start() # after 30 seconds, "hello, world" will be printed
t.join()
t2 = time.time()
change_time = t2 - t1
print (change_time)
七、队列
q = queue.Queue(maxsize=2)
# q.put(1)
# q.put(2)
# q.put(9)
# q.put('alex')
# q.put_nowait('jack')
# q.mutex
# q.qsize()
# q.join()
# q.task_done()
# q.empty() #判断队列是否为空
# q.full() #判断队列是否满
q=queue.LifoQueue()
q=queue.PriorityQueue()
q.put([4,'40'])
q.put([5,'50'])
q.put([1,'100'])
q.put([2,'20'])
print(q.get())
print(q.get())
print(q.get())
print(q.get())
八、事件驱动
import threading
import time
import random
def lighter():
count = 0
while True:
if count < 30:
if not event_flag.is_set():
event_flag.set()
print ('\033[32m----green light----\033[0m:%s'%count)
elif count < 35:
print('\033[33m----green light----\033[0m:%s' %count)
elif count < 60:
if event_flag.is_set():
event_flag.clear()
print('\033[31m----green light----\033[0m:%s' %count)
else:
count = 0
count += 1
time.sleep(0.2)
def car(n):
while True:
event_flag.wait()
print ('car [%s] is running throught the lighter...'%n)
time.sleep(random.randint(0, 3))
event_flag = threading.Event()
light_flag = threading.Thread(target=lighter)
light_flag.start()
car_list = ['宝马','大奔','路虎','兰博基尼','夏利']
for n in car_list:
car_flag = threading.Thread(target=car,args=(n,))
car_flag.start()
九、生产者消费者模型
import threading
import queue
import time
def consumer(name):
while True:
print ('%s 取到 骨头 【%s】,并吃了它。'%(name,q.get()))
time.sleep(0.5)
q.task_done() #回执
def producer(name):
count = 0
#while q.qsize() < 6:
for i in range (10):
print ('%s生成了骨头 %s!'%(name,count) )
q.put(count)
count +=1
time.sleep(0.3)
q.join()
q = queue.Queue(maxsize=5)
p = threading.Thread(target=producer,args=('Alex',))
p2 = threading.Thread(target=producer,args=('shuangmei',))
c = threading.Thread(target=consumer,args=('spider',))
p.start()
p2.start()
c.start()
十、进程及进程同步
from multiprocessing import Process, Lock
#作用:输出到屏幕出现乱行,加锁保证不串行 def f(l, i):
l.acquire()
try:
print('hello world', i)
finally:
l.release()
if __name__ == '__main__':
lock = Lock()
for num in range(10):
Process(target=f, args=(lock, num)).start()
十一、进程池
from multiprocessing import Process, Lock,Pool
import time
import os
#作用:输出到屏幕出现乱行,加锁保证不串行 def f(i):
#l.acquire()
print('hello world', i)
print ('-----f:',i,os.getpid())
time.sleep(4)
#l.release()
def callback(data):
print ('exec done---',data)
print('----callback',data,os.getpid()) if __name__ == '__main__':
lock = Lock()
pool = Pool(processes=5)
for num in range(10):
#Process(target=f, args=(lock, num)).start()
#pool.apply_async(func=f, args=(lock,num), callback=Bar)
pool.apply_async(func=f, args=(num,),callback=callback)
#apply 不要用,就用apply_async即可
pool.close()
pool.join()
十二、递归锁
import threading, time
def run1():
print("grab the first part data")
lock.acquire()
global num
num += 1
lock.release()
return num
def run2():
print("grab the second part data")
lock.acquire()
global num2
num2 += 1
lock.release()
return num2
def run3():
lock.acquire()
res = run1()
print('--------between run1 and run2-----')
res2 = run2()
lock.release()
print(res, res2)
if __name__ == '__main__':
num, num2 = 0, 0
lock = threading.RLock() #若用lock 则死锁
for i in range(10):
t = threading.Thread(target=run3)
t.start()
while threading.active_count() != 1:
print('active_count',threading.active_count())
else:
print('----all threads done---')
print(num, num2)
十三、进程间通讯
from multiprocessing import Process,Queue #进程的queue
import queue #线程的queue
def f(q):
q.put([42, None, 'hello'])
q.put(123)
if __name__ == '__main__':
#q=queue.Queue #线程的队列
q = Queue()
p = Process(target=f, args=(q,))
p.start()
print(q.get()) # prints "[42, None, 'hello']"
print (q.get())
p.join()
PYTHON学习之路_PYTHON基础(10)的更多相关文章
- PYTHON学习之路_PYTHON基础(1)
学习内容: 1.Python介绍 2.Python程序初接触和变量 3.Python用户交互 4.Python数据类型 5.Python循环if...(elif)...else 6.Python循环w ...
- PYTHON学习之路_PYTHON基础(6)
学习内容: Python模块介绍 1.time &datetime模块 2.random 3.shutil 4.shelve 5.xml处理 6.configparser 7.hashlib ...
- PYTHON学习之路_PYTHON基础(4)
学习内容: 1.Python函数的基本语法 2.Python函数的返回值与变量 3.Python嵌套函数 4.Python递归函数及实例(二分查找) 5.Python匿名函数 6.Python内置方法 ...
- PYTHON学习之路_PYTHON基础(3)
学习内容: 1.Python字典 2.Python集合 3.Python字符编码 4.Python文件操作 5.Python实例 一.Python字典 1.定义: dic1={'name':'alex ...
- PYTHON学习之路_PYTHON基础(8)
学习内容: Python模块介绍 1.经典类 or 新式类 2.抽象接口 3.静态方法.类方法.属性方法 4.反射 5.异常处理 6.socket编程初识 7.用socket实现get.put文件等功 ...
- PYTHON学习之路_PYTHON基础(2)
学习内容: 1.Python数据类型与变量 2.Python字符串 3.Python列表 4.Python while循环 5.Python字典 6.Python实例 一.Python数据类型与变量 ...
- python学习之路-day2-pyth基础2
一. 模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...
- Python学习之路-Day2-Python基础2
Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...
- Python学习之路-Day1-Python基础
学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...
随机推荐
- ubuntu apt 安装
1. ./autogen.sh: libtoolize: not found sudo apt-get install aptitude sudo aptitude install libtool 2 ...
- C#中的?和??的用法
1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; 是正确的,int i=null; 编译器就会报错.为了使值类型也 ...
- flash中字体兼容性
非谷歌浏览器设置字体font时需设置为该字体的(英文名字)或者(中文名字+可读性消除锯齿), 谷歌浏览器设置字体font时需设置为该字体的(中文名字) 总结:静态文本一般通过选择可读性消除锯齿来能实现 ...
- 'autocomplete="off"'在Chrome 中不起作用
大家都知道autocomplete属性是表单字段中的HTML5新属性,该属性有两种状态值,分别为"on" 和 "off",该属性可省略:省略属性值后默认值为&q ...
- Create side-by-side stereo pairs in the Unity game engine
Create side-by-side stereo pairs in the Unity game engine Paul BourkeDecember 2008 Sample Island pro ...
- TCP/IP详解系列 --- 概念总结01
UDP协议 .vs. TCP协议: 原理上:(TCP报文段. vs . UDP用户数据报) TCP协议的特性: TCP是面向连接的运输层协议,应用程序在使用TCP协议之前,必须先建立TCP连接. ...
- heading python decorator
decorator make a wrapper function do something before and after the original function. The wrapper f ...
- oracle,sqlserver同一个表两个字段和成一个列查询 (详询请加qq:2085920154)
sql 同一张表开两个字段合成一个字段 例如 SQL tab 字段1 字段2 字段3 3 4 莫 合成 tab 字段1 字段2 3-4 莫 SQL SERVER select 字段1 + ...
- 一起买beta版UI测试
一起买beta版UI测试 测试目的 保证代码质量,对各个单元进行测试,可以有效地保证代码的可靠性,让模块在与别的模块整合时出现更少的错误. UI测试 登录模块测试 登录模拟过程. 发帖模块测试 ...
- fool
from PIL import Imageimg = Image.open("D:\\pic2\\CZA3302.png")(w,h) = img.sizeim=img.conve ...