- 浏览: 247103 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (127)
- vim (3)
- python (44)
- pymysql (1)
- mysql (9)
- macvim (1)
- erlang (3)
- twisted (0)
- tornado (5)
- django (7)
- postgresql (5)
- sql (1)
- java (7)
- tech (4)
- cache (1)
- lifestyle (3)
- html (1)
- ubuntu (2)
- rabbitmq (1)
- algorithm (8)
- Linux (4)
- Pythonista (1)
- thread (1)
- sort (6)
- 设计模式 (1)
- search (1)
- Unix (6)
- Socket (3)
- C (2)
- web (1)
- gc (1)
- php (10)
- macos (1)
最新评论
-
2057:
这个程序有bug。
查找算法学习之二分查找(Python版本)——BinarySearch -
dotjar:
NB
一个Python程序员的进化[转]
线程有五种状态
新建、就绪、运行、阻塞、死亡。
阻塞有三种情况:
python提供了两种使用线程的方式,一种是函数式的,一种是类包装的。
* thread
* threading
1、thread:
thread.start_new_thread ( function , args [ , kwargs ] )
调用thread模块中的start_new_thread()函数来产生新的线程。
2、threading:
threading 模块提供的常用方法:
继承threading.Thread方法,重写run方法。
threading.Thread类的初始化函数原型:def __init__(self, group=None, target=None, name=None, args=(), kwargs={})
参数group是预留的,用于将来扩展;
参数target是一个可调用对象(也称为活动[activity]),在线程启动后执行;
参数name是线程的名字。默认值为“Thread-N“,N是一个数字。
参数args和kwargs分别表示调用target时的参数列表和关键字参数。
join()方法,调用该方法的线程将等待直到该Thread对象完成,再恢复运行。
调用Thread.join将会使主调线程堵塞,直到被调用线程运行结束或超时。参数timeout是一个数值类型,表示超时时间,如果未提供该参数,那么主调线程将一直堵塞到被调线程结束。
threading.Lock对象:mutex,有acquire()和release()方法
RLock允许在同一线程中被多次acquire。而Lock却不允许这种情况。注意:如果使用RLock,那么acquire和release必须成对出现,即调用了n次acquire,必须调用n次的release才能真正释放所占用的琐。
threading.Condition对象:condition variable,建立该对象时,会包含一个Lock对象(因为condition variable总是和mutex一起使用)。可以对Condition对象调用acquire()和release()方法,以控制潜在的Lock对象。
参考资料:
http://docs.python.org/2/library/threading.html
http://www.cnblogs.com/vamei/archive/2012/10/11/2720042.html
http://www.pythonclub.org/python-basic/threading
http://blog.csdn.net/JGood/article/details/4299476
http://docs.python.org/2/library/thread.html#module-thread
http://www.cnblogs.com/huxi/archive/2010/06/26/1765808.html
新建、就绪、运行、阻塞、死亡。
阻塞有三种情况:
- 同步阻塞是指处于竞争锁定的状态,线程请求锁定时将进入这个状态,一旦成功获得锁定又恢复到运行状态;
- 等待阻塞是指等待其他线程通知的状态,线程获得条件锁定后,调用“等待”将进入这个状态,一旦其他线程发出通知,线程将进入同步阻塞状态,再次竞争条件锁定;
- 而其他阻塞是指调用time.sleep()、anotherthread.join()或等待IO时的阻塞,这个状态下线程不会释放已获得的锁定。
python提供了两种使用线程的方式,一种是函数式的,一种是类包装的。
* thread
* threading
1、thread:
>>> import thread >>> dir(thread) ['LockType', '__doc__', '__name__', '__package__', '_count', '_local', 'allocate', 'allocate_lock', 'error', 'exit', 'exit_thread', 'get_ident', 'interrupt_main', 'stack_size', 'start_new', 'start_new_thread']
thread.start_new_thread ( function , args [ , kwargs ] )
调用thread模块中的start_new_thread()函数来产生新的线程。
2、threading:
>>> import threading >>> dir(threading) ['BoundedSemaphore', 'Condition', 'Event', 'Lock', 'RLock', 'Semaphore', 'Thread', 'ThreadError', 'Timer', '_BoundedSemaphore', '_Condition', '_DummyThread', '_Event', '_MainThread', '_RLock', '_Semaphore', '_Timer', '_VERBOSE', '_Verbose', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_active', '_active_limbo_lock', '_after_fork', '_allocate_lock', '_counter', '_enumerate', '_format_exc', '_get_ident', '_limbo', '_newname', '_pickSomeNonDaemonThread', '_profile_hook', '_shutdown', '_sleep', '_start_new_thread', '_sys', '_test', '_time', '_trace_hook', 'activeCount', 'active_count', 'currentThread', 'current_thread', 'deque', 'enumerate', 'local', 'setprofile', 'settrace', 'stack_size', 'warnings']
>>> dir(threading.Thread) ['_Thread__bootstrap', '_Thread__bootstrap_inner', '_Thread__delete', '_Thread__exc_clear', '_Thread__exc_info', '_Thread__initialized', '_Thread__stop', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_block', '_note', '_reset_internal_locks', '_set_daemon', '_set_ident', 'daemon', 'getName', 'ident', 'isAlive', 'isDaemon', 'is_alive', 'join', 'name', 'run', 'setDaemon', 'setName', 'start']
threading 模块提供的常用方法:
- threading.currentThread(): 返回当前的线程变量。
- threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
- threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
继承threading.Thread方法,重写run方法。
threading.Thread类的初始化函数原型:def __init__(self, group=None, target=None, name=None, args=(), kwargs={})
参数group是预留的,用于将来扩展;
参数target是一个可调用对象(也称为活动[activity]),在线程启动后执行;
参数name是线程的名字。默认值为“Thread-N“,N是一个数字。
参数args和kwargs分别表示调用target时的参数列表和关键字参数。
join()方法,调用该方法的线程将等待直到该Thread对象完成,再恢复运行。
调用Thread.join将会使主调线程堵塞,直到被调用线程运行结束或超时。参数timeout是一个数值类型,表示超时时间,如果未提供该参数,那么主调线程将一直堵塞到被调线程结束。
threading.Lock对象:mutex,有acquire()和release()方法
RLock允许在同一线程中被多次acquire。而Lock却不允许这种情况。注意:如果使用RLock,那么acquire和release必须成对出现,即调用了n次acquire,必须调用n次的release才能真正释放所占用的琐。
threading.Condition对象:condition variable,建立该对象时,会包含一个Lock对象(因为condition variable总是和mutex一起使用)。可以对Condition对象调用acquire()和release()方法,以控制潜在的Lock对象。
- Condition.wait([timeout]): wait方法释放内部所占用的琐,同时线程被挂起,直至接收到通知被唤醒或超时(如果提供了timeout参数的话)。当线程被唤醒并重新占有琐的时候,程序才会继续执行下去。
- Condition.notify(): 唤醒一个挂起的线程(如果存在挂起的线程)。注意:notify()方法不会释放所占用的琐。
- Condition.notifyAll() 唤醒所有挂起的线程(如果存在挂起的线程)。注意:这些方法不会释放所占用的琐。
参考资料:
http://docs.python.org/2/library/threading.html
http://www.cnblogs.com/vamei/archive/2012/10/11/2720042.html
http://www.pythonclub.org/python-basic/threading
http://blog.csdn.net/JGood/article/details/4299476
http://docs.python.org/2/library/thread.html#module-thread
http://www.cnblogs.com/huxi/archive/2010/06/26/1765808.html
发表评论
-
macos 10.9.2 clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command
2014-03-25 19:13 1759方法总是有的,当然需要你去寻找。 当然如果花费太多的时间在一件 ... -
PostgreSQL psycopg2:IndexError: tuple index out of range
2014-01-09 17:04 2230Postgresql psycopg2使用like查询的时候 ... -
Python 迭代器和生成器
2013-10-15 23:09 2849迭代器 迭代器只不过是一个实现迭代器协议的容器对象。它基于两个 ... -
Python时间模块
2013-10-15 23:03 3469time模块 时间模块中最常用的一个函数就是获取当前时间的函数 ... -
Python装饰器
2013-10-15 22:59 1568编写自定义装饰器有许多方法,但最简单和最容易理解的方法是编写一 ... -
python list
2013-10-15 22:56 1254简单总结以及整理如下: >>> dir( ... -
Python Excel
2013-09-10 17:21 975安装lib easy_install xlrd def ... -
排序算法学习(python版本)之堆排序(HeapSort)
2013-07-01 22:54 1996Contains: 堆排序以及堆排序的应用 堆排序(Heaps ... -
python range xrange
2013-06-25 23:30 1149引用Help on built-in function ran ... -
python class
2013-06-25 00:54 1828引用类是创建新对象类 ... -
AttributeError: 'module' object has no attribute 'SendCloud'
2013-06-05 11:46 7083网上查了下 意思是说你命名的文件名不能和lib重名,这样会导 ... -
python string
2013-05-07 23:44 2198如果这就是字符串,这本来就是字符串 首先看下字符串的方法 ... -
Python property
2013-03-29 19:56 0由于之前有总结过,可以参考http://2057.iteye. ... -
python tips
2013-03-28 23:57 8831、enum #!/usr/bin/env python ... -
python decorators
2013-03-28 23:36 1365Contains: 1、decorators 2、funct ... -
python closures
2013-03-28 22:09 1190Closure:如果在一个内部函数里,对在外部作用域(但不是在 ... -
Python map、filter,reduce介绍
2013-03-28 22:02 13091、filter(function,iterable) 引用C ... -
Python __new__ 、__init__、 __call__
2013-03-26 23:49 5351Contains: __new__: 创建对象时调用,返回当 ... -
Python socket简介
2013-03-25 23:42 2168自豪地使用dir和help. Python 2.7.2 ( ... -
Tornado ioloop源码简析
2013-03-21 00:18 2849#!/usr/bin/env python #-*-en ...
相关推荐
Python 基础 之 python 线程知识点整理,并实现一个简单多线程 udp 聊天应用 目录 Python 基础 之 python 线程知识点整理,并实现一个简单多线程 udp 聊天应用 一、简单介绍 二、能学到 三、实现思路 四、效果...
【Python多线程图片自动识别】是Python编程领域中一种高效处理大量图片的应用技术,它结合了计算机视觉和多线程编程。在这个场景下,我们使用Python来实现一个能够自动识别图片内容的系统,同时优化进度条显示和数据...
1. **多线程与GIL(全局解释器锁)**:Python的多线程在CPython实现中受到GIL限制,无法实现真正的并行计算。理解GIL的存在可以帮助我们避免线程间的同步问题,并选择合适的并发模型。 2. **多进程与进程间通信...
CHM版的"Python深入理解"部分可能包含了Python的高级主题,如元类、生成器表达式、异步编程(协程和asyncio库)、异常处理、文件I/O、网络编程、并发与多线程、性能优化等。这些内容将帮助你提升对Python深层机制的...
Python编程笔记是对Python开发知识的全面总结和整理,旨在帮助读者深入理解和掌握这门流行的高级编程语言。笔记分为两大部分,第一部分是Python的核心概念,第二部分涉及更高级的主题。 在前言中,作者可能介绍了...
对python并发进行的笔记整理,个人所学习使用,主要包括多进程,多线程,协程,IO多路复用,进程线程通信等
在2014年,辛星完成了对Python标准库的整理工作,发布了一个名为“2014年辛星python标准库整理夏季版”的文档。这份文档是对Python标准库的一次深入梳理和总结,尽管辛星本人承认这份文档可能不全面,并承诺在未来的...
这个名为"Python项目整理:基础入门、数据分析、爬虫实践-Python-Projects.zip"的压缩包文件显然是一个综合性的学习资源,旨在帮助用户通过实际项目来提升Python技能。下面,我们将深入探讨这些关键领域的知识点。 ...
11. **并发编程**:Python提供了线程和进程两种并发模型,以及异步I/O(如asyncio库),用于编写高效的并发程序。 12. **单元测试**:Python的unittest模块提供了一套完善的单元测试框架,帮助开发者确保代码质量。...
14. **并发编程**:多线程、多进程的使用,了解GIL(全局解释器锁)及其对Python多线程的影响,以及异步I/O模型(如asyncio)。 15. **数据库操作**:使用SQLite或MySQL等数据库,了解SQL语言,使用Python的数据库...
- 多线程和异步:了解如何使用Python的threading库实现多线程爬虫,以及asyncio库实现异步爬虫,提高爬取效率。 通过阅读和实践这四个部分的笔记,你将能够从零开始逐步掌握Python语言,并具备基本的网络爬虫开发...
8. **高级主题**:如正则表达式、多线程、多进程、异步编程(如asyncio库)以及数据科学相关的库如NumPy、Pandas、Matplotlib等。 压缩包中的“书”可能是指实际的电子书文件,这些书籍可能包括了《Python编程:从...
【Python-可以断点续爬的豆瓣单线程图书爬虫】 在Python的世界里,Web爬虫是一种常用的数据获取工具,用于自动化地抓取互联网上的信息。本项目专注于构建一个针对豆瓣图书的单线程爬虫,其核心特点是支持断点续爬。...
其实网络上已经有很多基于Python的入门爬虫程序了,所以学习起来比较方便,唯独那个多线程爬虫一直都学的不是很明白,所以就写下这篇blog记录一下学到的一些东西(主要是对自己所学的一些东西进行整理和总结)。...
5. **结果收集**:所有线程扫描完成后,收集并整理结果,包括开放的端口、服务类型等信息。 6. **结果输出**:将扫描结果输出到指定文件,供用户查看和分析。 ### 3. 使用指南 使用`portSpider`通常涉及以下步骤:...
标题中的"【源代码】Pythone+PyQt5+爬虫+多线程 : 豆瓣陶书工具(GUI)"表明这是一个使用Python编程语言,结合PyQt5图形用户界面库,实现的一个爬虫程序,该程序具备多线程功能,并且主要目标是通过抓取豆瓣网站的数据...
这份“超级全面的学习笔记”可能涵盖Python的基础语法、数据结构、控制流、函数、面向对象编程、异常处理、文件操作、模块和包、网络编程、多线程等主题。通过这些笔记,学习者可以得到更直观、更具实践性的指导,...
本资源“多线程编程学习案例代码整理”是一个专门针对这一主题的实践集合,旨在帮助开发者深入理解和掌握多线程编程的核心概念。 多线程编程主要涉及以下几个关键知识点: 1. **线程的概念**:线程是程序中的执行...