threading 模块

threading模块里面主要是对一些线程的操作对象化了,创建了Thread class。使用线程有两种模式,一种是创建线程要执行的 函数,把这个函数传递进Thread对象里,让它来执行;另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里。

 1 __author__ = ‘Zechary‘
 2 import string, threading, time
 3 def thread_main(a):
 4     global count, mutex
 5     threadname = threading.current_thread().getName()
 6
 7     for x in xrange(0, int(a)):
 8         mutex.acquire()
 9         count = count + 1
10         mutex.release()
11         print threadname, x, count
12         time.sleep(1)
13
14 def run(num):
15     global  count, mutex
16     threads = []
17     count = 1
18     mutex = threading.Lock()
19     for x in xrange(0, num):
20         threads.append(threading.Thread(target=thread_main, args=(10,)))
21     for t in threads:
22         t.start()
23     for t in threads:
24         t.join()
25
26 if __name__ == ‘__main__‘:
27     num = 4
28     run(4)

继续类:

 1 __author__ = ‘Zechary‘
 2 import threading
 3 import time
 4
 5 class Test(threading.Thread):
 6     def __init__(self, num):
 7         threading.Thread.__init__(self)
 8         self.run_num = num
 9
10     def run(self):
11         global count, mutex
12         threadname = threading.currentThread().getName()
13         for x in xrange(0, int(self.run_num)):
14             mutex.acquire()
15             count += 1
16             mutex.release()
17             print threadname, x, count
18             time.sleep(1)
19
20 if __name__ == ‘__main__‘:
21     global count, mutex
22     threads = []
23     num = 4
24     count =1
25     mutex = threading.Lock()
26     for x in xrange(0, num):
27         threads.append(Test(10))
28     for t in threads:
29         t.start()
30     for t in threads:
31         t.join()
时间: 2024-10-14 21:09:44

threading 模块的相关文章

python threading模块中对于信号的抓取

最近的物联网智能网关(树莓派)项目中遇到这样一个问题:要从多个底层串口读取发来的数据,并且做出相应的处理,对于每个串口的数据的读取我能想到的可以采用两种方式: 一种是采用轮询串口的方式,例如每3s向每个串口的buffer区去取一次数据,但是这样可能会有缓冲区溢出的可能,同时,数据的同步也可能会出现一定的问题,因为数据的上传周期是可以用户自定义的,一旦用户定义的上传周期过短或过长,都可能造成读取的数据出问题. 另一种方式,就是采用多线程方式,把每个串口读取数据放在单独的子线程中,每个子线程阻塞于串

python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)

今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系,纯的python代码处理一般逻辑的确无法活动性能上的极大提升,但是在处理需要等待外部资源返回或多用户的应用程序中,多线程仍然可以作为一个比较好的工具来进行使用. python提供了两个模块thread和threading 来支持python的多线程操作.通俗的讲一般现在我们只使用threading

Python 多线程threading模块

首先,我们在了解多线程时需要理解的就是什么是多线程,按照官方的解释就是:多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术. 在我自学到这里的时候,通过会在想进程和线程到底是有什么区别,我的理解就是: 进程就是一个应用程序在处理机上的一次执行过程,它是一个动态的概念,而线程是进程中的一部分,一个进程可以包含多个线程. 下面就以简单的例子来加强我们对python 线程的理解. 默认情况下,我们在没有启动线程的时候,可以看一下程序总的运行时间,应该是每个函数

python中threading模块详解(一)

python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thread模块更高层的API来提供线程的并发性.这些线程并发运行并共享内存. 下面来看threading模块的具体用法: 一.Thread的使用 目标函数可以实例化一个Thread对象,每个Thread对象代表着一个线程,可以通过start()方法,开始运行. 这里对使用多线程并发,和不适用多线程并发做

再看python多线程------threading模块

现在把关于多线程的能想到的需要注意的点记录一下: 关于threading模块: 1.关于 传参问题 如果调用的子线程函数需要传参,要在参数后面加一个","否则会抛参数异常的错误. 如下: 1 for i in xrange(5): 2 threads.append(threading.Thread(target=worker,args=(i,))) 2.关于join()阻塞 join()方法一旦被调用,这个线程就会被阻塞住,等其他线程执行完才执行自身.当我们在主线程A中,创建了n个子线

python多线程-threading模块

threading 是我们常用的用于 python 多线程的模块,其功能更加丰富.下面我们就来开始学习这个模块. 同样的,我这里声明一样我使用的版本是 python2.7,不同版本直接可能存在差异. 老规矩,使用 help() 函数获取帮助文档,看看里面有什么内容. threading 模块中提供了一个 thread 的类,注意不要和 thread 模块搞混了,两者差别还是很大的.thread 这个类可以实例化一个对象,每个对象代表一个线程,可以调用其中的 run() 方法来开启一个线程的运行.

对threading模块源码文件的解读(不全)

# -*- coding: utf-8 -*- #python 27 #xiaodeng #对threading模块源码文件的解读(不全) import threading #类 #Thread() #构造方法 #threading.Thread() #__init__(self, group=None, target=None, name=None, args=(), kwargs=None, verbose=None) #group:保留为将来扩展时,可以类被实现 #target:要执行的方

Python之threading模块简单使用

下面的代码来自<Python核心编程>(第二版)一书. threading模块对象 说明 Thread 表示一个线程的执行的对象 Lock 锁原语对象(跟thread模块里的锁原语对象相同) RLock 可重入锁对象.使单线程可以再次获得已经获得了的锁(递归锁定) Condition 条件变量对象能让一个线程停下来,等待其他线程满足了某个"条件".如,状态的改变或值得改变 Event 通用的条件变量,多个线程可以等待某个事件的发生,在事件发生后,所有的线程都会被激活 Sem

Day39:threading模块

一.threading模块 1.线程对象的创建 1.1 Thread类直接创建 import threading import time def countNum(n): # 定义某个线程要运行的函数 print("running on number:%s" %n) time.sleep(3) if __name__ == '__main__': t1 = threading.Thread(target=countNum,args=(23,)) #生成一个线程实例 t2 = threa