#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 = 100def action_unlock():# 定义一个全局变量global gl_numwhile gl_num > 0:gl_num -= 1time.sleep(1)print 'the arg is %d' % gl_numprint threading.current_thread().nameprint ''def action_lock():global gl_numwhile gl_num > 0:# 锁定lock.acquire()gl_num -= 1# time.sleep(1)print 'the arg is %d' % gl_numprint 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()

转载于:https://www.cnblogs.com/dreamyu/p/7592502.html

人生苦短之Python多线程相关推荐

  1. Python多线程(3)——Queue模块

    Python多线程(3)--Queue模块 Queue模块支持先进先出(FIFO)队列,支持多线程的访问,包括一个主要的类型(Queue)和两个异常类(exception classes). Pyth ...

  2. python统计csv行数_对Python 多线程统计所有csv文件的行数方法详解

    如下所示: #统计某文件夹下的所有csv文件的行数(多线程) import threading import csv import os class MyThreadLine(threading.Th ...

  3. c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划

    作者 | 万里羊责编 | 王晓曼出品 | CSDN博客线程和进程计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行.如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间 ...

  4. python3 多线程_图解|为什么 Python 多线程无法利用多核

    (给Python开发者加星标,提升Python技能) 来源:后端技术指南针 1.全局解释锁 如题: Python的多线程为什么不能利用多核处理器? 全局解释器锁(Global Interpreter ...

  5. python多线程下的信号处理程序示例

    下面是一个网上转载的实现思路,经过验证,发现是可行的,就记录下来. 思路 python多线程中要响应Ctrl+C的信号以杀死整个进程,需要: 1.把所有子线程设为Daemon: 2.使用isAlive ...

  6. Python 多线程抓取网页 牛人 use raw socket implement http request great

    Python 多线程抓取网页 - 糖拌咸鱼 - 博客园 Python 多线程抓取网页 最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术 ...

  7. python 多线程编程之_thread模块

    python 多线程编程之_thread模块 参考书籍:python核心编程 _thread模块除了可以派生线程外,还提供了基本的同步数据结构,又称为锁对象(lock object,也叫原语锁.简单锁 ...

  8. python多线程读取文件的问题_Python多线程同步---文件读写控制方法

    1.实现文件读写的文件ltz_schedule_times.py #! /usr/bin/env python #coding=utf-8 import os def ReadTimes(): res ...

  9. c语言多线程转python多线程,真正的python 多线程!一个修饰符让你的多线程和C语言一样快...

    > Python 多线程因为GIL的存在,导致其速度比单线程还要慢.但是近期我发现了一个相当好用的库,这个库只需要增加一个修饰符就可以使原生的python多线程实现真正意义上的并发.本文将和大家 ...

最新文章

  1. 马斯克受罚离任董事长,默多克之子或将成接替者!
  2. mysql备份恢复实验
  3. cesium按路径飞
  4. 阿里巴巴成立云原生技术委员会,云原生升级为阿里技术新战略
  5. Python基础教程:r‘‘, b‘‘, u‘‘, f‘‘ 的含义
  6. vscode 经过跳板机,连接到内网服务器
  7. 在 Visual Studio 2010 中创建 ASP.Net Web Service
  8. openGL与openGL ES 的区别
  9. 蓝桥杯 ADV-131算法提高 选择排序
  10. Spring后端接收表单方式上传的文件和数据
  11. poj 3450 Corporate Identity 枚举+kmp,话说这家伙给我一顿超时啊!!!!
  12. Jackson 格式化日期问题
  13. EDFbrowser查看edf文件及睡眠分期认识
  14. 牛客网华为机试题训练汇总(JavaScript)
  15. 金桔智能门锁实现人证房三统一原理
  16. bool类型转int, 或者bool数组对象转int/float数组对象
  17. SSH密匙key介绍
  18. Google邮箱账号登陆存在异常活动怎么办?
  19. 18款最佳Bug跟踪管理系统
  20. R语言关联分析之啤酒和尿布

热门文章

  1. Java堆和栈的一些区别。。。
  2. CSDN中对Web自定义控件的讨论帖
  3. python asyncio回调函数_最近用 Python 的 asyncio,有好多不懂。。
  4. mysql 唯一性约束报错_怪异的MySQL Online DDL报错Duplicate entry
  5. python classmethod知识_python基础知识讲解——@classmethod和@staticmethod的作用
  6. python实现自动打电话软件_用Python拨打电话
  7. JAVA移慎_谨慎使用Java8的默认方法
  8. linux下glew例子,一个简单的GLSL Shader例子
  9. dnf跨一服务器修复,DNF跨区服务器炸裂:一阶段史诗回档,官方补偿何在
  10. 7.QML Qt Quick——基于Qt Quick Controls 2实现图片浏览器