美文网首页
一个比较完整的Python多线程操作的例子

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

作者: 兮嘉 | 来源:发表于2017-09-07 15:59 被阅读165次

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多线程操作的例子

    2017.10.2更新,坑比Python因为Global Interpreter Lock(GIL)的原因,也就是...

  • Python多线程例子

    Python中一个多线程的例子写这个例子是为了加强记忆,方便理解

  • python------多线程和单线程

    一、创建多线程 Python提供两个模块进行多线程的操作,分别是thread和threading,前者是比较低级的...

  • python进程

    一、创建多线程 Python提供两个模块进行多线程的操作,分别是thread和threading,前者是比较低级的...

  • python高级线程、进程和进程池

    一、创建多线程 Python提供两个模块进行多线程的操作,分别是thread和threading,前者是比较低级的...

  • 浅谈python中的多线程和多进程(二)

    原创:hxj7 本文继续分享一个关于python多线程和多进程区别的例子 前文《浅谈python中的多线程和多进程...

  • 一个比较完整的机器学习例子

    一个比较完整的机器学习例子 本文根据《Hands-on Machine Learning with Scikit-...

  • Python多线程

    Python内置库:threading(多线程操作) Python的线程操作在旧版本中使用的是thread模块,在...

  • 多线程与线程

    Python提供两个模块进行多线程的操作,分别是thread和threading,前者是比较低级的模块,用于更底层...

  • 线程

    多线程--threading python的thread模块是比较底层的模块,python的threading模块...

网友评论

      本文标题:一个比较完整的Python多线程操作的例子

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