流畅的python

并发编程之线程

2019-04-24  本文已影响0人  洛克黄瓜

启动与停止线程

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()

线程间通信

给关键部分加锁

image.png

创建线程池

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

上一篇下一篇

猜你喜欢

热点阅读