5. 多线程(_thread)

# ref: https://docs.python.org/zh-cn/3/library/_thread.html

5.1. 应用编程接口说明

'''
开启一个新线程并返回其标识。
线程执行函数 function 并附带参数列表 args (必须是元组)。 可选的 kwargs 参数指定一个关键字参数字典。
'''
_thread.start_new_thread(function, args[, kwargs])

'''
返回一个新的锁对象。锁中的方法在后面描述。初始情况下锁处于解锁状态。
'''
lock = _thread.allocate_lock()

'''
 申请获得锁,有必要的话会等待其他线程释放锁
'''
lock.acquire()

'''
 释放锁。锁必须已经被获取过,但不一定是同一个线程获取的。
'''
lock.release()

'''
 返回锁的状态:如果已被某个线程获取,返回 True,否则返回 False。
'''
lock.locked()

'''
锁对象的类型。
'''
_thread.LockType

5.2. 案例

import time, _thread

cnt = 0

# create lock
lock = _thread.allocate_lock()

lock.acquire()
def increase(d):
    global cnt
    while True:
        cnt += 1
        time.sleep_ms(d)
        lock.release()

def print_count(d):
    global cnt
    while True:
        lock.acquire()
        print("count: ", cnt)

_thread.start_new_thread(increase, (1000, ))
_thread.start_new_thread(print_count, (2000, ))