一个比较完整的Python多线程操作的例子

2017.10.2更新,坑比Python因为Global Interpreter Lock(GIL)的原因,也就是每个进程只能开启一个解释器,就算实现了多线程,但因为主进程只有一个所以只有一个解释器,多线程的内容还是顺序执行的(不要问我为什么知道,我不想回忆→_→)
解决方法是把代码改成多进程的,具体是引入multiprocessing库,把下面代码中用到threading的地方改成Process,代码懒得贴了。

直接放代码了,解释见注释。

import threading

mutex_w = threading.Lock()  # 创建锁

# 定义每个线程需要完成的工作
def worker(seed):
    for seed in seeds:
        # 做一些不需要锁的操作
        # 操作共享资源
        if mutex_w.acquire(1):  # 尝试获取锁
            thread_name = threading.current_thread().name  # 获取当前进程名
            print("%s starts writing the file" % thread_name)
            # 操作共享资源
            print("%s finishes writing the file" % thread_name)
            mutex_w.release()  # 释放锁


if __name__ == "__main__":
    # 本例中有15个线程,需要计算100次,尽可能平均得把计算任务分配给所有线程
    num_proc = 2  # 定义线程数
    seeds = [np.arange(i, 2, num_proc) for i in range(num_proc)]  # 把seed分给不同的线程进行处理

    thread_list = list()
    for i in range(num_proc):
        t = threading.Thread(target=worker, args=(seeds[i],))
        thread_list.append(t)

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

    # 主线程中等待所有子线程退出
    for t in thread_list:
        t.join()

    # 所有子线程完成后可以做一些别的操作  
    save_results(res)
  

你可能感兴趣的:(一个比较完整的Python多线程操作的例子)