python成长之路11
import threading def f1(args):
print(args)
#方式一
t=threading.Thread(target=f1,args=(123,))
t.start() #方式二
class MyThread(threading.Thread):
def __init__(self,func,args):
self.func=func
self.args=args
super(MyThread,self).__init__()
def run(self):
self.func(self.args)
t1=MyThread(f1,123)
t1.start()
123
import queue q=queue.Queue(2)
q.put(1)
q.put(2)
q.put(3,block=False) #设置不阻塞(block为False),插不进去直接报错
import queue,threading,time def f1(q):
q.put(123,timeout=3) #超时5s没有插进队列就会抛异常
q=queue.Queue(2)
q.put(1)
q.put(2)
t=threading.Thread(target=f1,args=(q,)) #子线程插入第三条数据
t.start() #创建好子线程啦,等待cpu调度
#情况一:
time.sleep(1) #主线程等待1s,子线程put超时3秒,先主线程get,后子线程put,put成功
#情况二:
time.sleep(5) #主线程等待5s,子线程put超时3秒,主线程没来得及get,子线程就put,会报错 q.get()
import queue q=queue.Queue()
q.put(1)
q.put(2)
print(q.get())
print(q.get())
print(q.get(block=False)) #设置不阻塞(block为False),队列里没有数据会报错
import queue,threading,time def f1(q):
print(q.get(timeout=3))
q=queue.Queue()
q.put(1)
q.put(2)
print(q.get())
print(q.get())
t=threading.Thread(target=f1,args=(q,))
t.start()
#情况一:
time.sleep(1) #主线程等待1s,子线程超时3s,主线程先put,子线程后get,不会报错
#情况二:
time.sleep(5) #主线程等待5s,子线程超时3s,子线程先get,主线程再put,子线程get不到数据,直接报错 q.put(3)
#!/usr/bin/env python
# -*- coding:utf-8 -*- import queue
#队列:先进先出
q=queue.Queue(10) #队列最大长度,默认是0 无限大
q.put(11,timeout=5) #放数据,默认阻塞True 阻塞时可以设置超时时间
q.put(22,block=False) #非阻塞,不等待
size=q.qsize() #队列长度
data=q.get(timeout=5) #取数据 默认阻塞True 阻塞时可以设置超时时间
data=q.get(block=False) #非阻塞,不等待
bool_num=q.empty() #队列为空返回True
bool_num=q.full() #队列满了返回True
q.join() #阻塞进程,当队列中任务执行完毕之后(q.task_done),不再阻塞
q.task_done()
import queue
#队列:先进先出
q=queue.Queue(2) #队列最大长度,默认是0 无限大 q.put(11)
q.task_done()
q.put(22) q.join()
阻塞进程
import queue
#队列:先进先出
q=queue.Queue(2) #队列最大长度,默认是0 无限大 q.put(11)
q.task_done()
q.put(22) #每执行完一步要执行下q.taskdone()
q.task_done()
q.join()
不阻塞
import queue
#队列:后进先出
q=queue.LifoQueue(5)
q.put(123) #优先级相同,先进先出
q.put(345)
q.put(456) print(q.get())
print(q.get())
print(q.get())
456
import queue
#队列:优先级
q=queue.PriorityQueue(5) q.put((0,123)) #优先级相同,先进先出
q.put((1,345))
q.put((0,456)) print(q.get())
print(q.get())
print(q.get())
import queue
#队列:双向队列 q=queue.deque()
q.append(123)
q.append(456)
q.appendleft(789)
q.appendleft(890)
# 980 789 123 456
print(q.pop())
print(q.popleft())
456
#!/usr/bin/env python
# -*- coding:utf-8 -*- import threading,queue,time
q=queue.Queue(50)
def producter(user):
print("%s来买票啦" % user)
q.put("%s来买票啦" % user)
def consumer():
who=q.get()
time.sleep(5)
print(who + "--出票") for i in range():
user="user" + str(i)
t=threading.Thread(target=producter,args=(user,))
t.start()
while True:
t1=threading.Thread(target=consumer)
t1.start()
#!/usr/bin/env python
# -*- coding:utf-8 -*- import threading,queue,time
q=queue.Queue(5)
def producter(user):
print("%s来买票啦" % user)
q.put("%s来买票啦" % user)
num=12
def consumer(lock):
global num
lock.acquire() #上锁
who=q.get()
num-=1
time.sleep(2)
print(who + "--出票","剩余票数:%d" % num)
lock.release() #开锁
for i in range(4):
user="user" + str(i)
t=threading.Thread(target=producter,args=(user,))
t.start()
#lock=threading.Lock()
lock=threading.RLock() #构建锁对象 Lock只能加一重锁 RLock可以加多重锁
while True:
t1=threading.Thread(target=consumer,args=(lock,))
t1.start()
#lock=threading.Lock()
#lock=threading.RLock() #构建锁对象 Lock只能加一重锁 RLock可以加多重锁
lock=threading.BoundedSemaphore(2) #上面两种锁都是每次放行1个线程,这个可放行多个
一次放行2个线程
#!/usr/bin/env python
# -*- coding:utf-8 -*- import threading def func(i,event):
print(i)
event.wait() #监测是什么灯,红灯停绿灯行
print(i+100) event=threading.Event() #信号 收到信号就放行所有线程 for i in range(4):
t=threading.Thread(target=func,args=(i,event,))
t.start() event.clear() #设置成红灯
inp=input(">>>:")
if inp == "1":
event.set() #设置成绿灯
线程池:
#!/usr/bin/env python
# -*- coding:utf-8 -*- import queue,threading,time
class ThreadPool:
def __init__(self,maxsize=5):
self.maxsize=maxsize
self._q=queue.Queue(maxsize)
for i in range(maxsize):
self._q.put(threading.Thread)
def get_thread(self):
return self._q.get()
def add_thread(self):
self._q.put(threading.Thread) pool=ThreadPool(5)
def task(args,p):
print(args)
time.sleep(2)
p.add_thread()
for i in range(10):
t=pool.get_thread()
obj = t(target=task,args=(i,pool,))
obj.start()
3个缺点:
#!/usr/bin/env python
# -*- coding:utf-8 -*- from multiprocessing import Process
from multiprocessing import queues
import multiprocessing
from multiprocessing import Manager def foo(i,args):
args[i]=i+100
print(args.values())
if __name__ == "__main__":
obj=Manager()
li=obj.dict()
for i in range(5):
p = Process(target=foo,args=(i,li,))
p.start()
import time
time.sleep(2)
python成长之路11的更多相关文章
- (转)Python成长之路【第九篇】:Python基础之面向对象
一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...
- 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xa)的解决方法【华为云分享】
[写在前面] 在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\ ...
- 【Python成长之路】装逼的一行代码:快速共享文件
[Python成长之路]装逼的一行代码:快速共享文件 2019-10-26 15:30:05 华为云 阅读数 335 文章标签: Python编程编程语言程序员Python开发 更多 分类专栏: 技术 ...
- python成长之路第三篇(1)_初识函数
目录: 函数 为什么要使用函数 什么是函数 函数的返回值 文档化函数 函数传参数 文件操作(二) 1.文件操作的步骤 2.文件的内置方法 函数: 一.为什么要使用函数 在日常写代码中,我们会发现有很多 ...
- 我的Python成长之路---第一天---Python基础(1)---2015年12月26日(雾霾)
2015年12月26日是个特别的日子,我的Python成之路迈出第一步.见到了心目中的Python大神(Alex),也认识到了新的志向相投的伙伴,非常开心. 尽管之前看过一些Python的视频.书,算 ...
- 我的Python成长之路---第三天---Python基础(11)---2016年1月16日(雾霾)
三.深浅拷贝 在Python中将一个变量的值传递给另外一个变量通常有三种:赋值.浅拷贝以及深拷贝 讨论深浅拷贝之前我们把Python的数据类型分为基本数据类型包括数字.字符串.布尔以及None等,还有 ...
- 我的Python分析成长之路11
数据预处理 如何对数据进行预处理,提高数据质量,是数据分析中重要的问题. 1.数据合并 堆叠合并数据,堆叠就是简单地把两个表拼在一起,也被称为轴向链接,绑定或连接.依照轴的方向,数据堆叠可分为横向堆叠 ...
- Python成长之路第二篇(1)_数据类型内置函数用法
数据类型内置函数用法int 关于内置方法是非常的多这里呢做了一下总结 (1)__abs__(...)返回x的绝对值 #返回x的绝对值!!!都是双下划线 x.__abs__() <==> a ...
- python成长之路七-函数的进阶
1,python中,名称空间分三种: 全局命名空间 局部命名空间(临时命名空间) 内置名称空间 2,作用域(两种): 1,全局作用域 包含:全局名称空间 内置名称空间 2,局部作用域 包含:局 ...
随机推荐
- 深入剖析PE文件
不赖猴的笔记,转载请注明出处. 深入剖析PE文件 PE文件是Win32的原生文件格式.每一个Win32可执行文件都遵循PE文件格式.对PE文件格式的了解可以加深你对Win32系统的深入理解. 一. ...
- Highlight On Mouseover Effect With JQuery
How to get the xpath by clicking an html element How to get the xpath by clicking an html element Qu ...
- 通过jstack定位在线执行java系统故障_案例1
问题描写叙述: 在一个在线执行的java web系统中,会定时执行一个FTP上传的任务,结果有一天发现,文件正常生成后却没有上传. 问题初步分析: 1.查看日志文件 发现这个任务仅仅打印了開始进入FT ...
- 180行ruby代码搞定游戏2048
最今在玩2048这款小游戏,游戏逻辑简单,很适合我这样的对于游戏新入行的人来实现逻辑.于是选择了最拿手的ruby语言来实现这款小游戏的主要逻辑.还是挺简单的,加起来4小时左右搞定. 上代码: requ ...
- DevExpress ASP.NET 使用经验谈(5)-通过ASPxGridView实现CRUD操作
这节,我们将通过使用DevExpress的ASPxGridView控件,实现对数据的CRUD操作. 首先,我们在解决方案中,添加一个网站: 图一 添加新网站 图二 添加DevExpress.Data. ...
- zoj 1109 zoj 1109 Language of FatMouse(字典树)
好开心,手动自己按照字典树的思想用c写了一个优化后的trie字典树,就是用链表来代替26个大小的字符数组.完全按照自己按照自己的想法打的,没有参考如何被人的代码.调试了一天,居然最后错在一个小问题上, ...
- spring jar包冲突
在用Spring+Hibernate做项目时候遇到java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit 网上查得答案 环境 ...
- GE_OG_CALC_COLUMN_EMPTY
CREATE OR REPLACE PROCEDURE CUST_MKT_DWH.GE_OG_CALC_COLUMN_EMPTY(P_TABLE_NAME IN VARCHAR2) IS --TYPE ...
- [LeetCode]题解(python):071-Simplify Path
题目来源: https://leetcode.com/problems/simplify-path/ 题意分析: 简化Unix上的绝对路径,也就是多个'/'代表一个,'..'表示返回上一级目录,‘.' ...
- MyEclipse 8.5整合Git,并在Github上发布项目(转)
下载Eclipse的git插件——EGit.下载网址http://download.eclipse.org/egit/updates-1.3/org.eclipse.egit-updatesite-1 ...