Python线程锁
多线程适用于IO密集型,多线程实现方式有两种,详见下方例子
例子:
import threading
class MyThread(threading.Thread):
def __init__(self, args):
#使用super写法,按照父类.方法的方式直接重写
super(MyThread, self).__init__()
self.args = args
def run(self):
print ("start MyThread {0}".format(self.args))
def worker(n):
print ("start worker{0}".format(n))
if __name__ == "__main__":
#同多进程使用方法
for i in xrange(1, 6):
#使用threading.Thread指定函数和参数,多线程执行
t1 = threading.Thread(target=worker, args=(i,))
#开始多线程执行
t1.start()
t1.join()
#重写threading.Thread中的run方法实现多线程
for x in xrange(6, 11):
t2 = MyThread(x)
t2.start()
t2.join()
输出:
start worker1
start worker2
start worker3
start worker4
start worker5
start MyThread 6
start MyThread 7
start MyThread 8
start MyThread 9
start MyThread 10
多线程锁
多线程锁的两种写法,详见下面两个例子
例子:
import threading
import time
def worker(name, lock):
#with写法会自动获得锁并自动释放锁,与
with lock:
print ("start {0}".format(name))
time.sleep(2)
print ("end {0}".format(name))
if __name__ == "__main__":
#锁的实例化
lock = threading.Lock()
t1 = threading.Thread(target=worker, args=("worker1", lock))
t2 = threading.Thread(target=worker, args=("worker2", lock))
t1.start()
t2.start()
print ("main end")
输出:
start worker1
main end
end worker1
start worker2
end worker2
例子:
import threading
import time
def worker(name, lock):
#获取线程锁
lock.acquire()
#捕获异常
try:
print ("start {0}".format(name))
time.sleep(2)
print ("end {0}".format(name))
except Exception as e:
raise e
finally:
#释放线程锁
lock.release()
if __name__ == "__main__":
#锁的实例化
lock = threading.Lock()
t1 = threading.Thread(target=worker, args=("worker1", lock))
t2 = threading.Thread(target=worker, args=("worker2", lock))
t1.start()
t2.start()
print ("main end")
输出:
start worker1
main end
end worker1
start worker2
end worker2
线程的共享内存
线程缺点是有一个线程崩溃时所有剩余线程均会崩溃
例子:
#线程共享内存
import threading
def worker(l):
l.append("a")
l.append("b")
l.append("c")
if __name__ == "__main__":
l = list()
l += xrange(1,6)
print (l)
t = threading.Thread(target=worker, args=(l,))
t.start()
print (l)
输出:
a1 b2 c3
a4 b5 c6
线程池
例子:
#此包为第三方包,需要使用pip安装
import threadpool
def test1(a, b, c):
print("a{0} b{1} c{2}".format(a, b, c))
if __name__ == "__main__":
#the way one
lst_vars_1 = ['1', '2', '3']
lst_vars_2 = ['4', '5', '6']
func_var = [(lst_vars_1, None), (lst_vars_2, None)]
# the way two
dict_vars_1 = {'a':'1', 'b':'2', 'c':'3'}
dict_vars_2 = {'a':'4', 'b':'5', 'c':'6'}
func_var = [(None, dict_vars_1), (None, dict_vars_2)]
pool1 = threadpool.ThreadPool(2)
request = threadpool.makeRequests(test1, func_var)
[pool1.putRequest(req) for req in request]
pool1.wait()
本文转自 粗粮面包 51CTO博客,原文链接:http://blog.51cto.com/culiangmianbao/2050447,如需转载请自行联系原作者
相关文章:

session_id
<?php session_start(); echo session_id(); // 输出 dqr58dnuqj2gufvg4o3tmjb9v4?>设置 session_id()<?php session_id("NowaMagic"); session_start(); echo session_id(); ?>程序恢复session,首先要知道session_id,大家通过…

【青少年编程】【二级】寻找宝石
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档&…

零基础参加java培训主要学什么
互联网行业永远是一个需求非常大的行业,尤其是技术人员岗位,java技术岗一直很受大家的关注,不少学员都是零基础开始学,那么零基础参加java培训主要学什么呢?来看看下面的详细介绍。 零基础参加java培训主要学什么?其实无论学什么…

python pexpect
123456789101112131415161718192021222324252627282930313233343536373839404142434445Python 远程批量修改密码脚本#tar -zxvf pexpect-3.0.tar.gz#cd pexpect-3.0#python setup.py install#!/usr/bin/env python#coding:utf8import pexpect impo…
牧小熊:Adobe Illustrator 在科研作图中的应用!
聂雄伟,华中农业大学,Datawhale原创作者。 关于大数据的完整讲解!电商数据分析项目总结!数据项目总结:蛋壳公寓租金分析!数据项目总结:王者荣耀总决赛预测!你要的用户画像实践来了&…

win7,windowsXP安装mysql-5.1.49-win32,中文版、英文版,通吃
安装过程与其它Windows安装程序一样,首先出现的是安装向导欢迎界面[img]file:///C:/Users/房继诺/AppData/Roaming/Tencent/Users/1194361820/QQ/WinTemp/RichOle/0U9%7BVWW%60KM~S2X)VM2QF0N.jpg[/img] 直接点击“Next”,继续,选择安装类型这…

UI设计培训教程分享:UI设计师的色彩使用技巧
作为一名合格的UI设计师,色彩的使用是非常重要的,一个专业的UI设计师对于UI设计色彩的搭配是非常的出色的,下面小编就为大家分享UI设计培训教程:UI设计师的色彩使用技巧 UI设计培训教程分享:UI设计师的色彩使用技巧 一…

hive 使用技巧笔记
来源:http://michael-roshen.iteye.com/blog/2115268 例子: INSERT OVERWRITE TABLE prices_collected_${hiveconf:wid_version} select pc.collect_id as product_id , regexp_extract(pc.price,(\\d*\\.?\\d),1) as price , pc.region, as location…

GNU make manual 翻译( 一百四十九)
继续翻译 5.7.4 The --print-directory Option ------------------------------------If you use several levels of recursive make invocations, the -w or --print-directory option can make the output a lot easier to understand by showing each directory as make sta…

【青少年编程】马雷越:商品价格竞猜
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档&…

女生参加web前端培训压力大吗
女生参加web前端培训压力大吗?这个问题很多人都是想知道的,因为对于互联网行业来说,大部分都是男性,尤其是技术岗位,女生做前端压力大小和能力也有很大的关系,前端技术好工作效率高,那么压力相对较低。 女…

Android 入门开发
哈哈 我已经学会Android开发了 而且还发布了两款产品 转载于:https://www.cnblogs.com/Aixieer/archive/2012/10/04/2711443.html

整理了一下Asp.net源码常见问题(完善中...),欢迎大家补充修正(最后更新于06-01)!...
以下是一些51aspx网友经常反馈的问题,特总结放在下面,本部分内容会陆续更新。同时也提醒广大网友在仔细查看源码项目对应的运行环境及每个代码中所附的文本文件《51aspx源码必读.txt》。 Q:打开51aspx上网站源码项目需要什么样的软件环境&…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 1. 一元线性回归
Datawhale南瓜书是经典机器学习教材《机器学习》(西瓜书)的公式推导解析指南,旨在让在学习西瓜书的过程中,再也没有难推的公式,学好机器学习。 相关内容: 西瓜书公式推导讲解来了!0. 导学 后台…

Python培训教程分享:“高效实用” 的Python工具库
作为一名合格Python技术员,对于Python工具库的使用是少不了的,本期Python培训教程就为大家分享的是““高效实用” 的Python工具库”,希望能够帮助到大家。 Python培训教程分享:“高效实用” 的Python工具库: 1、Reque…

LNMP安装与启动脚本编写
1、安装mysql 1cd /usr/local/src/ 下载mysql: 1wget http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.72-linux-x86_64-glibc23.tar.gz 解压: 1tar zxvf/usr/local/src/mysql-5.1.72-linux-x86_64-glibc23.tar.gz 更改命名: 1mv mysql-5…

Flash Builder 找不到所需的Adobe Flash Player调试器版本的解决办法
Flash Builder在Debug时出现的问题:Flash Builder 找不到所需的Adobe Flash Player调试器版本 解决方法: 1. 进入Flash Builder的安装目录 C:\Program Files\Adobe\Adobe Flash Builder 4.6\player\win\11.1 2. 安装flashplayer_11_plugin_debug.exe&…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 2. 多元线性回归
Datawhale南瓜书是经典机器学习教材《机器学习》(西瓜书)的公式推导解析指南,旨在让在学习西瓜书的过程中,再也没有难推的公式,学好机器学习。 以往内容: 西瓜书公式推导讲解来了!0. 导学1. 一…

UI设计培训分享:ui设计师如何培养设计思维?
作为一名UI设计师,工作上经常会遇到思维碰撞的问题,培养自己的设计思维是大部分UI设计师都需要的,那么ui设计师如何培养设计思维呢?来看看下面的详细介绍。 UI设计培训分享:ui设计师如何培养设计思维? 一、因舍而得 正如我们看到…

[转载红鱼儿]kbmmw 开发点滴:ErrorTable用法
TkbmMWClientQuery有一个ErrorTable属性,用于记录提交Query时返回的错误结果。当用户保存修改的业务数据,出错时,可以用ErrorTable定位出错的记录并提示错误信息。 下面是实现代码: procedure TForm2.Button4Click(Sender: TObjec…

ijkplayer iOS集成
2019独角兽企业重金招聘Python工程师标准>>> http://www.jianshu.com/p/1f06b27b3ac0 如果按楼主的方式配置后还编译报错,可能的原因是,需要将环境设置成C混编环境,可以直接将AppDelegate.m 改名成AppDelegate.mm 即可 转载于:htt…

【Whalepaper】CV论文研读 - OneNet:Towards End-to-End One-Stage Object Detection
Whalepaper是由周郴莲负责的一个每周分享论文的活动。 NLP 论文分享:每周日 晚上 九点CV 论文分享: 每周日 晚上 九点Res 论文分享:每周六 晚上 九点半 欢迎对paper感兴趣的人加入我们的分享啊!!! 分享人…

软件测试培训分享:做软件测试工作如何清楚的描述一个bug
一名合格的软件测试工程师是需要清楚的交代自己的工作任务的,必须要清楚的告诉技术员出现的bug,那么做软件测试工作如何清楚的描述一个bug呢?来看看下面的详细介绍。 软件测试培训分享:做软件测试工作如何清楚的描述一个bug? 发现问题的版本…

kvm虚拟化学习笔记(十七)之KVM到KVM之v2v迁移
1.源KVM虚拟主机node1(1).查看源KVM虚拟主机上的虚拟机列表,本文计划将CentOS6.5-01虚拟机迁移到其它KVM虚拟主机中。[rootnode1 ~]# virsh list --allId Name State ----------------------------------------------------- CentOS6.5-01 …

UVA 216 Getting in Line
大意:给你一些定点,让你以代价最小的边将所有的点连起来。 思路:数据范围很小,可以通过最小生成树或者回溯来解决。 最小生成树去写时不知道哪错了,于是用回溯模拟了一遍,相当于模拟一个数组的全排列。 AC …

【青少年编程】【三级】猜数字
Scratch竞赛交流群已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档)。 猜数字…

参加web前端开发培训具体要学什么内容
学习web前端技术不是一天两天就能学会的,想要成为一名合格的web前端工程师,一定要进行系统的培训学习,那么下面小编就为大家详细的介绍一下参加web前端开发培训具体要学什么内容? 参加web前端开发培训具体要学什么内容? 一、了解web前端 we…

最长公共上升子序列 LCIS
关于子序列什么什么的问题,以前一直没怎么在意过,直到省赛突然考了一个赤裸裸的LCIS,这下才着急了,因为忘记怎么做了,而且模版也没有带。从第三名一直掉到第11名,而且超上来的,全都是会做这题的…
【组队学习】【26期】动手学数据分析
动手学数据分析 论坛版块: http://datawhale.club/c/team-learning/25-category/25 开源内容: https://github.com/datawhalechina/hands-on-data-analysis 学习目标 了解数据分析中基本库的操作(比如:pandas,numpy和matplo…

利用FFmpeg切割视频
关键词:FFmpeg,seek,ss,t,to,搜索,定位介绍如果你想要从输入文件中切割一部分,需要用到ss选项。快速定位需要将ss放在输入文件的前面(即-i的前面)ffmpeg-ss 00:03:00 -i …