11. 多线程

python多线程

首先需要明确的是:多线程模式下,同时仍然仅有一个计算任务在电脑中运行,只是在当前任务需要进行IO操作时,替换到下一个计算任务到线程上进行计算,唯一节省的时间仅仅只是IO操作时间

1. 创建一个线程

import threading
def job(data):
    pass

add_thread = threading.Thread(target = job, args=(data,), name='thread' )
add_thread.start()
  • target: 用于指定创建的线程的目标函数,在多线程中,每个线程的任务必须打包成一个功能。
  • args: 给线程指定的函数传入参数,参数值一定是一个元组类型数据
  • name: 用于定义线程的名称
  • 线程创建后,要使用 start() 方法启动该线程

**2. job():**区分多线程和主线程

import threading
def job(data):
    pass

add_thread = threading.Thread(target = job, args=(data,), name='thread' )
add_thread.start()
add_thread.join() # 当且仅当多线程运行完毕后,才会继续执行后续主线程任务
print("final")
  • join(): 方法将多线程与主线程进行分割,可以让python项目在处理完需要使用多线程处理的作业后再回复到主线程

3. Queue(): 保存多线程制定函数的计算结果

  • 由于多线程指定的函数计算到的最终结果,不能想普通函数一样通过return方法直接返回,所以要借助Queue()实现计算结果的保存和读取

    from queue import Queue
    
    def job(data, q):
        # 一系列处理
        q.put(data)
    
    q = Queue() # 定义一个q实例
    # q传入线程中
    add_thread = threading.Thread(target=job, args=(data, q), name='thread') 
    add_thread.start()
    add_thread.join() # 一定要保证线程结束,确保put方法完成
    print(q.get()) # 使用get方法读取数据
    
    • q=Queue():定义了一个用于保存数据的Queue()实例,该实例要作为参数传入要多线程执行的功能函数中
    • 在函数中使用 put() 方法保存处理好的数据,**一次只能传入一个数据,**多个数据可以使用列表、字典、元组等形式储存
    • get():方法用于从队列中取出数据,一次只取一个数据
  • Queue更倾向于一次只保存一个线程的数据结果,但同样支持同时传入多个线程中保存多个数据,但是由于线程的随机性,往往很难区分哪个数据是由哪个线程传入的,可以设置线程名用来描述和区分

    from queue import Queue
    
    def job(data, q, ID):
        # 一系列处理
        q.put({ID:data}) # 保存数据时,记录数据来自的线程ID
        
    
    q = Queue() # 定义一个q实例
    # q传入线程中
    add_thread = threading.Thread(target=job, 
                                  args=(data, q, "add_thread"), 
                                  name='thread') 
    add1_thread = threading.Thread(target=job, 
                                  args=(data, q, "add_thread1"), 
                                  name='thread') 
    add_thread.start()
    add1_thread.start()
    add_thread.join() # 一定要保证线程结束,确保put方法完成
    add1_thread.join() # 一定要保证线程结束,确保put方法完成
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啥都想学的大学生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值