python threading thread_Python多线程(threading.Thread)的用法

threading.Thread类最普遍的用法如下所示:

import threading

import time

count = 0

"""注: 可以参考这篇博客https://blog.csdn.net/l835311324/article/details/86608850的示例2,

这个MyThread类继承了threading模块的Thread类,对其下面的run方法进行了重写"""

class MyThread(threading.Thread):

def __init__(self , threadName):

super(MyThread,self).__init__(name=threadName)

"""一旦这个MyThread类被调用,自动的就会运行底下的run方法中的代码,

因为这个run方法所属的的MyThread类继承了threading.Thread"""

def run(self):

global count

for i in range(100):

count += 1

time.sleep(0.3)

print(self.getName() , count)

for i in range(2):

MyThread("MyThreadName:" + str(i)).start()

以下是Thread对象方法

Thread 对象数据属性

描述

name

线程名

ident

线程的标识符

daemon

布尔标志,表示这个线程是否是守护线程

Thread主要对象方法

Thread 对象方法

描述

init(group=None, tatget=None,args=(), kwargs ={}, verbose=None, daemon=None)

实例化一个线程对象,需要有一个可调用的 target,以及其参数 args或 kwargs。

start()

开始执行该线程

run()

定义线程功能的方法(通常在子类中被应用开发者重写)

join (timeout=None)

直至启动的线程终止之前一直挂起;除非给出了 timeout(秒),否则会一直阻塞

示例:

import threading

import time

def read():

for x in range(5):

print('在%s,正在听音乐' % time.ctime())

time.sleep(1.5)

def write():

for x in range(5):

print('在%s,正在看电视' % time.ctime())

time.sleep(1.5)

def main():

music_threads = [] # 用来存放执行read函数线程的列表

TV_threads = [] # 用来存放执行write函数线程的列表

for i in range(1,2): # 创建1个线程用于read(),并添加到read_threads列表

t = threading.Thread(target=read) # 执行的函数如果需要传递参数,threading.Thread(target=函数名,args=(参数,逗号隔开))

music_threads.append(t)

for i in range(1,2): # 创建1个线程执行write(),并添加到write_threads列表

t = threading.Thread(target=write) # 执行的函数如果需要传递参数,threading.Thread(target=函数名,args=(参数,逗号隔开))

TV_threads.append(t)

for i in range(0,1): # 启动存放在read_threads和write_threads列表中的线程

music_threads[i].start()

TV_threads[i].start()

if __name__ == '__main__':

main()

为了让线程更好的封装,可以用threading模块下的Thread类,继承这个类,然后实现run方法,线程就回自动运行run方法中的代码,具体示例如开头所示的代码块。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在多线程编程中,线程同步是非常重要的。线程同步是指在多个线程并发访问共享资源时,为了避免出现数据不一致或其他问题,需要对线程的执行进行协调和控制。常见的线程同步方式包括锁、信号量、条件变量等。 在 Python 中,线程同步可以通过 threading 模块中的 Lock 类来实现。Lock 类提供了 acquire() 和 release() 方法,用于控制资源的访问。 使用 Lock 类的基本流程如下: 1. 创建 Lock 对象。 2. 在需要访问共享资源的代码块前调用 acquire() 方法获取锁,阻塞其他线程对该资源的访问。 3. 在访问共享资源的代码块后调用 release() 方法释放锁,允许其他线程对该资源的访问。 下面是一个使用 Lock 类实现线程同步的示例: ```python import threading # 共享资源 count = 0 # 创建 Lock 对象 lock = threading.Lock() def add(): global count for i in range(100000): # 获取锁 lock.acquire() count += 1 # 释放锁 lock.release() def sub(): global count for i in range(100000): # 获取锁 lock.acquire() count -= 1 # 释放锁 lock.release() # 创建两个线程 t1 = threading.Thread(target=add) t2 = threading.Thread(target=sub) # 启动线程 t1.start() t2.start() # 等待线程执行结束 t1.join() t2.join() print(count) ``` 在上面的示例中,我们创建了一个共享资源 count,然后分别创建了两个线程对该资源进行加和减操作。在访问共享资源的代码块前,我们使用 acquire() 方法获取锁,阻塞其他线程对该资源的访问;在访问共享资源的代码块后,我们使用 release() 方法释放锁,允许其他线程对该资源的访问。 需要注意的是,获取锁和释放锁的代码必须成对出现,否则会出现死锁等问题。此外,在使用锁进行线程同步时,应尽量避免持锁时间过长,以免影响程序的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值