- 浏览: 2652802 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
python模块之threading: 在python中使用多线程
python是支持多线程的,并且是native的线程。主要是通过thread和threading这两个模块来实现的。thread是比较底层的模 块,threading是对thread做了一些包装的,可以更加方便的被使用。这里需要提一下的是python对线程的支持还不够完善,不能利用多 CPU,但是下个版本的python中已经考虑改进这点,让我们拭目以待吧。
threading模块里面主要是对一些线程的操作对象化了,创建了叫Thread的class。一般来说,使用线程有两种模式,一种是创建线程要执行的 函数,把这个函数传递进Thread对象里,让它来执行;另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里。我们来看看这两种做法吧。
上面的就是第一种做法,这种做法是很常见的,下面是另一种,曾经使用过Java的朋友应该很熟悉这种模式:
#-*- encoding: gb2312 -*-
import threading
import time
class Test(threading.Thread):
def __init__(self, num):
threading.Thread.__init__(self)
self._run_num = num
def run(self):
global count, mutex
threadname = threading.currentThread().getName()
for x in xrange(0, int(self._run_num)):
mutex.acquire()
count = count + 1
mutex.release()
print threadname, x, count
time.sleep(1)
参考:http://blog.csdn.net/jgood/article/details/4305604
threading模块里面主要是对一些线程的操作对象化了,创建了叫Thread的class。一般来说,使用线程有两种模式,一种是创建线程要执行的 函数,把这个函数传递进Thread对象里,让它来执行;另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里。我们来看看这两种做法吧。
#-*- encoding: gb2312 -*- import string, threading, time def thread_main(a): global count, mutex # 获得线程名 threadname = threading.currentThread().getName() for x in xrange(0, int(a)): # 取得锁 mutex.acquire() count = count + 1 # 释放锁 mutex.release() print threadname, x, count time.sleep(1) def main(num): global count, mutex threads = [] count = 1 # 创建一个锁 mutex = threading.Lock() # 先创建线程对象 for x in xrange(0, num): threads.append(threading.Thread(target=thread_main, args=(10,))) # 启动所有线程 for t in threads: t.start() # 主线程中等待所有子线程退出 for t in threads: t.join() if __name__ == '__main__': num = 4 # 创建4个线程 main(4)
上面的就是第一种做法,这种做法是很常见的,下面是另一种,曾经使用过Java的朋友应该很熟悉这种模式:
#-*- encoding: gb2312 -*-
import threading
import time
class Test(threading.Thread):
def __init__(self, num):
threading.Thread.__init__(self)
self._run_num = num
def run(self):
global count, mutex
threadname = threading.currentThread().getName()
for x in xrange(0, int(self._run_num)):
mutex.acquire()
count = count + 1
mutex.release()
print threadname, x, count
time.sleep(1)
if __name__ == '__main__': global count, mutex threads = [] num = 4 count = 1 # 创建锁 mutex = threading.Lock() # 创建线程对象 for x in xrange(0, num): threads.append(Test(10)) # 启动线程 for t in threads: t.start() # 等待子线程结束 for t in threads: t.join()
参考:http://blog.csdn.net/jgood/article/details/4305604
相关推荐
Python 中的多线程编程是使用 Threading 模块实现的,该模块提供了丰富的功能来创建和管理线程。在学习 Threading 模块之前,需要了解 Python 的基础知识,包括函数、类、对象等概念。 Threading 模块 Threading ...
在Python编程中,多线程是并发执行任务的重要机制,特别是在需要执行多个独立任务时,可以提高程序的执行效率。`threading`模块是Python的标准库之一,它提供了线程管理的功能,包括创建、同步和控制线程。然而,...
在Python 2.7及以后的版本中,`thread`模块被重命名为`_thread`,并推荐使用`threading`模块进行多线程编程。 **1. 常用线程函数** - `threading.active_count()`: 返回当前活动的`threading.Thread`对象的数量。 ...
总的来说,理解并正确使用锁和可重入锁是解决Python多线程安全问题的关键。在编写多线程程序时,合理地引入锁机制可以防止数据竞争,确保程序的正确性。但同时,过度使用锁可能导致程序的复杂性和性能下降,因此在...
【Python多线程threading模块详解】 Python的多线程主要通过`threading`模块来实现,该模块提供了丰富的功能,使得在Python中编写多线程应用变得方便。`threading`模块不仅包含了低级别的`_thread`模块的所有方法,...
1、多线程的理解 多进程和多线程都可以执行多个任务,线程是进程的一部分。...2、Python多线程创建 在Python中,同样可以实现多线程,有两个标准模块thread和threading,不过我们主要使用 更高级的threading模块。
### Python多线程模块 Python提供了两种多线程模块:`thread`和`threading`。`thread`模块是低级接口,而`threading`模块则更高级,提供更多的线程管理功能和同步原语,如锁、事件、条件变量等。在实际应用中,我们...
### Python多线程-threaning模块详解 #### 概述 Python中进行多线程编程时,`threading`模块是非常重要的工具之一。相比于较为基础的`thread`模块,`threading`模块提供了更为丰富的功能与灵活性。本文将详细介绍`...
在Python中,多线程是通过`threading`模块来实现的。然而,在默认情况下,该模块并未直接提供暂停、恢复以及退出线程的功能。这意味着一旦线程启动(即调用了`start()`方法),就只能等到线程内的目标函数完全执行...
总结起来,`python多线程定时器`的实现涉及到Python的`threading`和`time`模块,通过`Thread`和`Timer`类来创建和管理线程,使用定时器控制线程的启动时间。主程序`main.py`使用这些工具来安排多个任务按设定的间隔...
在阅读源码时,可以重点关注`Thread`类的构造方法、`start`、`run`、`join`等方法,以及同步对象如`Lock`的实现,这有助于理解Python多线程的工作原理。 总的来说,`threading`库是Python中进行多线程编程的主要...
这里我们将深入探讨如何在Python中使用多线程同步来确保文件读写的安全性。 首先,我们来看一个简单的文件读写示例。`ltz_schedule_times.py`中定义了两个函数,`ReadTimes()`和`WriteTimes()`。`ReadTimes()`函数...
Python提供了两个主要的模块来实现多线程:`threading`和`_thread`。`threading`模块是更高级的接口,提供了线程、锁、事件、信号量等同步原语,方便开发者控制线程的并发执行。`_thread`模块则提供基础的线程功能,...
在Python中,可以使用`threading`模块创建和管理线程。 标题中的“单线程与多线程Python爬虫”涉及的核心是如何利用线程技术优化地图瓦片的下载过程。单线程爬虫适用于小型项目,其代码简单易懂,但当需要下载大量...
在Python中,我们通常使用`threading`模块来实现多线程,而不是`thread`模块,因为`threading`模块提供了更高级别的功能和更好的线程管理。 `threading`模块的核心组件包括: 1. **Thread对象**:这是多线程编程的...
本文实例讲述了Python多线程threading模块用法。分享给大家供大家参考,具体如下: 多线程 – threading python的thread模块是比较底层的模块,python的threading模块对thread做了一些包装,可以更加方便的被使用。 ...
通过深入学习和实践压缩包中的“PYthon multithreading Test”源码,你可以更好地掌握Python多线程的原理和应用,为编写高效、稳定的多线程程序打下坚实的基础。在实际开发中,结合具体场景选择合适的并发模型,是...
首先,我们需要导入Python的`threading`模块,它是Python标准库中的多线程支持库。`threading.Thread`是创建新线程的类,而`threading.Lock`用于线程同步,防止竞态条件。 ```python import threading import ...
全局解释器锁(GTL):python代码的执行是由python虚拟机进行控制, 在主循环中只能有一个控制线程在执行 一个进程的独立运行片段,一个进程里面可以有多个线程 多线程之间的执行顺序是无序的 一个进程的多个线程间共享...