【笔记】Python多线程之Threading使用

【笔记】Python多线程之Threading使用

记录在python中使用多线程同步处理某个任务,并返回结果;

主体方法
t = threading.Thread(target=fun, args=(ii,))

注意,fun只能是函数名,不能带括号,带括号的直接运行该函数了

#  启动线程
for t in mission:
    t.start()
# 等待线程完成, 直至启动的线程终止之前,一直挂起,
for t in mission:
    t.join()

首先全部启动,然后join主进程,在进程结束之前,主进程不会终止;

自定框架

首先,我想要获取所有任务的返回值,而Threading库没有显示的方法来返回线程函数的返回值;

所以,自定义了一个框架,将先线程函数再包一层,然后,通过类的成员变量来获取每一个线程函数的返回值;

框架定义如下:

# coding:utf-8
"""
@author: Finks
@time: 2020/12/22 16:02

"""
import threading
import time


class MyThreading():
    def __init__(self):

        self.mission_dict = {}  # idx为键,{}值, 值{‘fun’: 不带括号函数名, ‘args':参数列表, ()给出}
        self.ret_dict = {}  # 返回结果字典,使用索引idx确定任务

        pass

    def trace_fun(self, idx, fun, args):
        """
        添加监控函数,将任务函数包在里面,目的是为了获取返回值
        :param kwargs:
        :return:
        """
        ret = fun(**args)
        self.ret_dict[idx] = ret

    def main(self):
        """
        多线程调用
        :return:
        """
        thread_list = []
        for mission in self.mission_dict.items():
            t = threading.Thread(target=self.trace_fun, args=(mission[0], mission[1]['fun'], mission[1]['args'],))
            thread_list.append(t)

        #  启动线程
        for t in thread_list:
            t.start()

        # 等待线程完成, 直至启动的线程终止之前,一直挂起,
        for t in thread_list:
            t.join()

        return self.ret_dict


def do(string, num):
    print(time.ctime(), '调用do函数, 参数为{}-{}'.format(string, num))
    t0 = time.time()
    time.sleep(num)
    print('参数为{}-{}调用完成, 耗时{}'.format(string, num, time.time() - t0))
    return num


if __name__ == '__main__':

    t0 = time.time()

    my_threading = MyThreading()

    # todo: 添加你的任务
    for i in range(5):
        my_threading.mission_dict[i] = {'fun': do, 'args': {'string': 'a', 'num': i}} # fun只能写函数名,不能带括号

    my_threading.main()
    print(my_threading.ret_dict)
    print("主线程耗时",time.time()-t0)

调用的时候使用该框架,进行多线程调用!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你是新手,这篇博客可能会对你有所帮助。博客的作者是B站黑马程序员的《python线程编程》的视频的笔记摘录。博客中的代码是作者手动敲的,可以直接运行,如果有错误,作者欢迎评论指正。在博客中,有两个示例代码可以帮助你理解多线程的概念和使用方法。第一个示例是一个简单的多线程实现,其中一个线程用来唱歌,另一个线程用来跳舞。在示例代码中,使用了`threading.Thread`来创建两个线程,并分别指定了目标函数和参数。然后通过`start`方法启动线程。这样,两个线程就可以并发地执行唱歌和跳舞的任务。第二个示例代码展示了线程之间执行的顺序。在这个示例中,使用了`threading.current_thread`来获取当前线程的线程对象,并打印出来。然后通过循环创建了5个子线程,并启动它们。由于多线程的执行是并发的,所以无法确定线程的执行顺序。希望这些示例代码对你理解和学习python线程编程有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python线程编程(详细:适合小白入门)](https://blog.csdn.net/weixin_44917390/article/details/119610760)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值