美文网首页流畅的python
并发编程之线程

并发编程之线程

作者: 洛克黄瓜 | 来源:发表于2019-04-24 20:19 被阅读0次

启动与停止线程

  • 库可以在单独的线程中执行任何的在Python中可以调用的对象
import time
from threading import Thread

def countdown(n):
    while n > 0:
        print('T-minus', n)
        n -= 1
        time.sleep(1)

t = Thread(target=countdown, args=(6,))
t.start()
t.join()  # 调用线程t的join()函数,会把这个线程t加入到当前线程(这里就是主线程),当前线程就会等待线程t的终止,才执行后续内容

当你创建好一个线程对象后,该对象并不会立即执行,除非你调用它的start()方法(当你调用start()方法时,它会调用你传递进来的函数,并把你传递进来的参 数传递给该函数)。Python中的线程会在一个单独的系统级线程中执行(比如说一个POSIX线程或者一个Windows线程),这些线程将由操作系统来全权管理。线程一旦 启动,将独立执行直到目标函数返回。你可以查询一个线程对象的状态,看它是否还在 执行:

if t.is_alive():
    print("Still running")
else:
    print("Completed")

对于需要长时间运行的线程或者需要一直运行的后台任务,你应当考虑使用后台线程。这些线程会在主线程终止时自动销毁。例如:

t = Thread(target=countdown, args=(6,), daemon=True)
t.start()
  • 由于全局解释锁(GIL)的原因,Python的线程被限制到同一时刻只允许一个线 程执行这样一个执行模型。所以, 的线程更适用于处理I/O和其他需要并发执 行的阻塞操作(比如等待I/O、等待从数据库获取数据等等),而不是需要多处理器并行的计算密集型任务。

线程间通信

  • 线程间数据是共享的,没什么好说的

给关键部分加锁

image.png

创建线程池

  • 使用ThreadPoolExecutor相对于手动实现的好处是它使得任务提交者更方便的从被调用函数中获取返回值。


    image.png

例子中返回的handle对象会帮你处理所有的阻塞与协作,然后从工作线程中返回数据给你。特别的, 操作会阻塞进程直到对应的函数执行完成并返回一个 结果。

相关文章

  • 年薪50W阿里P7架构师必备知识:并发+JVM+多线程+Nett

    并发编程 线程基础、线程之间的共享和协作一 线程基础、线程之间的共享和协作二 线程的并发工具类 线程的并发工具类、...

  • 并发编程基础

    并发编程 并发编程主要解决两个问题: 线程之间如何通信,指线程之间以何种机制交换信息。 线程之间如何同步,指程序控...

  • Java内存模型

    并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发...

  • Java 内存模型

    并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发...

  • 最详细分析Java 内存模型

    并发编程中, 线程之间如何通信及线程之间如何同步, 通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间...

  • JMM内存模型简介

    1.并发编程模型的两个关键问题 并发编程中需要处理两个关键问题:线程之间如何通信和线程之间如何同步。通信是指线程之...

  • Java内存模型

    线程之间的通信和同步 线程之间的通信和同步是并发编程领域的关键问题。 线程之间的通信 通信是指线程之间以何种机制来...

  • Java内存模型

    2.7 Java内存模型 2.7.1 并发编程模型 在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间...

  • JMM之重排序&Happens-Before

    并发编程中,需要处理两个关键问题: 线程之间如何通信?—共享内存+消息传递 线程之间如何同步? java的并发采用...

  • Java内存模型精讲

    1.JAVA 的并发模型 共享内存模型 在共享内存的并发模型里面,线程之间共享程序的公共状态,线程之间通过读写内存...

网友评论

    本文标题:并发编程之线程

    本文链接:https://www.haomeiwen.com/subject/sdzmgqtx.html