Python (十一)多线程

发布时间:2023年12月18日

程序员的公众号:源1024获取更多资料,无加密无套路!

最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》,《Java并发编程实战》等等
获取方式: 关注公众号并回复 电子书 领取,更多内容持续奉上


Python3 线程中常用的两个模块为:

  • _thread (低级模块)
  • threading (高级模块,是对_thread的封装,推荐使用)

?threading

threading 方法、属性

current_thread()

当前 threading.Thread 对象

enumerate()

所有存活的 threading.Thread 对象

active_count()

存活的 threading.Thread 对象数量

get_ident()

当前线程的线程标识符

main_thread()

主线程对象

get_native_id()

核分配给当前线程的原生集成线程ID

TIMEOUT_MAX

阻塞函数中timeout允许的最大值

?

from threading import Thread

def test_thread():
    print(threading.current_thread())
    print(threading.enumerate())
    print(threading.active_count())
    print(threading.get_ident())
    print(threading.main_thread())
    print(threading.get_native_id())
    print(threading.TIMEOUT_MAX)


def main():
    thread = Thread(target=test_thread,name='线程')
    thread.start()


if __name__ == '__main__':
    main()

输出

<Thread(线程, started 22108)>
[<_MainThread(MainThread, started 4064)>, <Thread(线程, started 22108)>]
2
22108
<_MainThread(MainThread, stopped 4064)>
22108
4294967.0

?线程使用

def test_thread(taskStart,taskEnd):
    start = time.time()
    print(threading.current_thread(),taskStart)
    #模拟任务运行时间
    time.sleep(random.randint(3, 9))
    end = time.time()
    print(threading.current_thread(),taskEnd,f'线程耗时: {end - start:.3f}秒.')


def main():
    threads = [
        Thread(target=test_thread, kwargs={'taskStart': '线程一开始执行。。。','taskEnd':'线程一执行完成!'}),
        Thread(target=test_thread, kwargs={'taskStart': '线程二开始执行。。。','taskEnd':'线程一执行完成!'}),
        Thread(target=test_thread, kwargs={'taskStart': '线程三开始执行。。。','taskEnd':'线程一执行完成!'})
    ]
    start = time.time()
    # 启动三个线程
    for thread in threads:
        thread.start()
        print(thread.name)
    # 等待线程结束
    for thread in threads:
        thread.join()

    end = time.time()
    print(f'总耗时: {end - start:.3f}秒.')

if __name__ == '__main__':
    main()

输出

<Thread(线程一, started 17448)> 线程一开始执行。。。
线程一
<Thread(线程二, started 21624)> 线程二开始执行。。。
线程二
<Thread(线程三, started 21408)> 线程三开始执行。。。
线程三
<Thread(线程一, started 17448)> 线程一执行完成! 线程耗时: 3.003秒.
<Thread(线程三, started 21408)> 线程一执行完成! 线程耗时: 8.010秒.
<Thread(线程二, started 21624)> 线程一执行完成! 线程耗时: 9.012秒.
总耗时: 9.013秒.


系列文章索引

Python (一) 操作Mysql

Python (二) 读写excel文件

Python (三) 读写csv文件

Python (四)读写word

Python (五) 处理图像

Python (六) 绘图

Python(七)操作JSON


文章来源:https://blog.csdn.net/feikillyou/article/details/135065219
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。