#encoding=utf-8
import threading
import time '''
python多线程并不是真正意义上的多线程,通常我们所说的多线程是多个线程同时执行某功能,而在python中
则是同一时间只有一个获得GIL的线程在跑,也就是GIL的存在使得python并不是真正意义上的多线程,特别是
在处理CPU密集型程序,但是在处理IO密集型程序时python多线程还是能发挥多线程的优势的,这是因为IO速
度相对于CPU来是很慢的(例如网络传输等)。GIL(global interpreter lock)全局解释锁,在执行python
代码时会产生互斥锁来限制线程对共享资源的访问。 开启线程的两种方式:
1.threading.Thread() Thread(group=None, target=None, name=None, args=(), kwargs={})
  group: 线程组,目前还没有实现,库引用中提示必须是None;
  target: 要执行的方法;
  name: 线程名;
  args/kwargs: 要传入方法的参数。
2.继承thread.Thread类,并重写run方法 ''' def action(arg):
time.sleep(3)
print 'the arg is %s' % arg
num_list = [1, 2, 3, 4]
# for i in num_list:
# t = threading.Thread(target=action, args=(i, ))
# t.start() # class MyThread(threading.Thread):
# def __init__(self, arg):
# super(MyThread, self).__init__()
# self.arg = arg
#
# def run(self):
# time.sleep(1)
# print "the arg is %s \n" % self.arg
# print self.name
#
# for i in num_list:
# t = MyThread(i)
# t.start() '''
构造方法:
Thread(group=None, target=None, name=None, args=(), kwargs={})
 group: 线程组,目前还没有实现,库引用中提示必须是None;
 target: 要执行的方法;
 name: 线程名;
 args/kwargs: 要传入方法的参数。
实例方法:
  isAlive(): 返回线程是否在运行。正在运行指启动后、终止前。
  get/setName(name): 获取/设置线程名。
  start(): 线程准备就绪,等待CPU调度
  is/setDaemon(bool): 获取/设置是后台线程(默认前台线程(False))。(守护线程在start之前设置)
   如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,主线程和后台线程均停止
如果是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程也执行完成后,程序停止
  start(): 启动线程。
  join([timeout]): 阻塞当前上下文环境的线程,直到调用此方法的线程终止或到达指定的timeout(可选参数)。
''' '''
线程锁,避免多个线程对共享资源的同时操作产生错误,在线程中使用Rlock
'''
# 创建一个锁
lock = threading.RLock()
gl_num = 100 def action_unlock():
# 定义一个全局变量
global gl_num
while gl_num > 0:
gl_num -= 1
time.sleep(1)
print 'the arg is %d' % gl_num
print threading.current_thread().name
print '' def action_lock():
global gl_num
while gl_num > 0:
# 锁定
lock.acquire()
gl_num -= 1
# time.sleep(1)
print 'the arg is %d' % gl_num
print threading.current_thread().name
# 完成操作锁释放
lock.release() thread_list = []
# 开启五个线程
for i in xrange(5):
t = threading.Thread(target=action_unlock)
thread_list.append(t)
for t in thread_list:
# 线程启动
t.start()

人生苦短之Python多线程的更多相关文章

  1. python多线程学习记录

    1.多线程的创建 import threading t = t.theading.Thread(target, args--) t.SetDeamon(True)//设置为守护进程 t.start() ...

  2. python多线程编程

    Python多线程编程中常用方法: 1.join()方法:如果一个线程或者在函数执行的过程中调用另一个线程,并且希望待其完成操作后才能执行,那么在调用线程的时就可以使用被调线程的join方法join( ...

  3. Python 多线程教程:并发与并行

    转载于: https://my.oschina.net/leejun2005/blog/398826 在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global int ...

  4. python多线程

    python多线程有两种用法,一种是在函数中使用,一种是放在类中使用 1.在函数中使用 定义空的线程列表 threads=[] 创建线程 t=threading.Thread(target=函数名,a ...

  5. python 多线程就这么简单(转)

    多线程和多进程是什么自行google补脑 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用简单的例子,让你对多线程有个初步的认识. 单线程 在好些年前的 ...

  6. python 多线程就这么简单(续)

    之前讲了多线程的一篇博客,感觉讲的意犹未尽,其实,多线程非常有意思.因为我们在使用电脑的过程中无时无刻都在多进程和多线程.我们可以接着之前的例子继续讲.请先看我的上一篇博客. python 多线程就这 ...

  7. python多线程监控指定目录

    import win32file import tempfile import threading import win32con import os dirs=["C:\\WINDOWS\ ...

  8. python多线程ssh爆破

    python多线程ssh爆破 Python 0x01.About 爆弱口令时候写的一个python小脚本,主要功能是实现使用字典多线程爆破ssh,支持ip表导入,字典数据导入. 主要使用到的是pyth ...

  9. 【python,threading】python多线程

    使用多线程的方式 1.  函数式:使用threading模块threading.Thread(e.g target name parameters) import time,threading def ...

随机推荐

  1. Java随机数技巧-新手篇

    package 向家康; import java.util.concurrent.ThreadLocalRandom; public class 练习21 { public static void m ...

  2. CentOS 笔记

    对安装CentOS安装使用过程中的问题做一个笔记,第一次安装,安装的是7.0版本,最小化安装. 安装环境 :Windows 2012 R2 Standard,Hyper-V Virstual Mach ...

  3. CodeSign error: code signing is required for product type 'Application' in SDK 'iOS 7.0'

    这个一般是证书设置的问题, 在build settings中找到 Code Signing->Code Signing Identity修改成有效的证书即可

  4. java高级编程-使用反射强制给private字段赋值

    转自:http://blog.csdn.net/yaerfeng/article/details/7103397 今天项目中遇到了一个问题,要调用一个类,并获取这个类的属性进行赋值然后将这个类传递到方 ...

  5. 转: WebRTC音视频引擎研究(1)--整体架构分析

    转自: http://blog.csdn.net/temotemo/article/details/7530504   目录(?)[+]   WebRTC技术交流群:234795279 原文地址:ht ...

  6. Flash如何为文字描边

    可以使用墨水瓶工具,但是要先把文字打散(可以打散之后再组合起来)粗细和颜色都可以调,粗细就是笔触,颜色就是前景色(边框颜色)  

  7. C 标准库 - <float.h>

    C 标准库 - <float.h> 简介 C 标准库的 float.h 头文件包含了一组与浮点值相关的依赖于平台的常量.这些常量是由 ANSI C 提出的,这让程序更具有可移植性.在讲解这 ...

  8. Eclipse 安装(Oxygen版本)

    Eclipse 安装(Oxygen版本) Eclipse 最新版本 Eclipse Neon,这个首次鼓励用户使用 Eclipse Installer 来做安装,这是一种由Eclipse Oomph提 ...

  9. icmp的程序(ping的实现)

    code来源于<网络编程与分层协议设计> chap7 ICMP协议程序设计 ----没有理解,没有编译,只是敲了出来 ping.h #define ICMP_ECHOREPLY 0#def ...

  10. python(20)- 列表生成式和生成器表达式练习Ⅱ

    题目一: 有两个列表,分别存放来老男孩报名学习linux和python课程的学生名字linux=['钢弹','小壁虎','小虎比','alex','wupeiqi','yuanhao']python= ...