TensorFlow 的 Session 对象是支持多线程的,因此多个线程可以很方便地在同一个会话下对同一个队列并行地执行操作。Python 本身也提供了创建线程的threading.py,这个文件提供了Thread 类来创建线程,Thread 类的 start()函数可以用于启动线程。但是使用Python程序实现这样的并行运算没有那么简单,因为所有的线程需要能同步终止,同时需要正确察觉每个线程触发的异常。在会话终止的时候,操作队列的多个线程必须能被正确关闭。Tensorflow提供了两个类来实现多线程—train.Coordinator类和train,QueueRunner类。其中前者侧重于管理线程,用来协调同时停止多个工作线程或者在线程发生异常时向等待线程终止的程序报告异常;后者比较侧重于创建线程本身。

使用Coordinator类管理线程
Coordinator类的主要方法有should_stop()、request_stop()和join(),下面分别介绍这三个方法。should_stop():通过函数的返回值判断线程是否停止,如果线程停止了,则函数返回True。request_stop():请求该线程及其他线程停止。Join():等待被指定的线程终止。接下来,以启动 Thread 创建的线程为例来说明 Coordinator 类及其3个函数用法。在启动线程之前,需要先声明一个 Coordinator 类,并将这个类传入每一个创建的线程中。这些线程通常一直循环运行,并一直查询Coordinator 类中提供的 should_stop()函数,直到 should_stop()返回值为 True时才退出当前的线程 。每一个启动的线程也可以通知其他启动的线程退出,它只需要调用 request_stop()函数即可:同时这个线程的 should stop()函数将会返回 True ,结果是所有线程都停下来。下面是实际代码操作:

在上面的代码中使用Thread类创建了5个线程,无论 5 个线程中的哪一个发出,request_stop()操作请求,这 5 个线程的 should_stop()函数返回值都会输出True,并且相应的发出 request_stop()操作请求的线程也会停止。下面是输出的结果:

使用QueueRunner创建线程
QueueRunner类主要用于替代Python自身的Thread类创建多个线程。但是需要注意的地方是,QueueRunner类必须配合Coordinator类一起使用。正确的操作流程是先使用QueueRunner类创建多个线程来操作同一个队列,这些线程会通过train,add_queue_runner()函数加入一个集合中,之后再调用train.start_queue_runners()函数来启动所有线程并通过参数来管理这些线程的Coordinator类。train.add_queue_runner()函数中如果没有指定自己的集合,那么这些线程会被加入到计算图默认的一个集合中(这里就不再赘述,只要了解就可以)。需要注意的是,这个函数只支持启动指定集合中的 QueueRnner,所以需要先将线程放入集合中。 一般的做法是把train.add_queue_runner()函数指定的集合与 train. start_queue_runner()函数指定的集合保持一致。 以下是操作代码:

上面的代码中,我们首先定义了一个队列,以及一个入队操作,之后通过QueueRunner类创建了5个线程来执行这个入队操作,调用start_queue_runners()函数来运行线程,最后打印出结果。如下图所示:

总结:本节有关使用多线程处理输入的数据的内容就到这里了,如果有没有看明白的可以实际上手操作一下,这样会更有利于理解消化。

关注小鲸融创,一起深度学习金融科技!

auto.js停止所有线程_使用多线程处理输入的数据相关推荐

  1. auto.js停止所有线程_十年架构师带你快速上手多线程

    这世上有三样东西是别人抢不走的:一是吃进胃里的食物,二是藏在心中的梦想,三是读进大脑的书 多线程快速入门 1.线程与进程区别 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.线程是一组 ...

  2. auto.js停止所有线程_多线程快速入门(二)及面试题

    获取线程对象以及名称 常用线程api方法 start()启动线程 currentThread()获取当前线程对象 getID()获取当前线程ID Thread-编号 该编号从0开始 getName() ...

  3. 多线程分批量处理list数据_使用多线程处理输入的数据

    TensorFlow 的 Session 对象是支持多线程的,因此多个线程可以很方便地在同一个会话下对同一个队列并行地执行操作.Python 本身也提供了创建线程的threading.py,这个文件提 ...

  4. auto.js停止所有线程_Java线程与并发编程实践:深入理解volatile和final变量

    同步有两种属性:互斥性和可见性.synchronized关键字与两者都有关系.Java同时也提供了一种更弱的.仅仅包含可见性的同步形式,并且只以volatile关键字关联. 假设你自己设计了一个停止线 ...

  5. auto.js停止所有线程_Java多线程编程基础知识 概念介绍,以及线程状态

    一.进程 进程是操作系统结构的基础:是一次程序的执行:是一个程序及其数据在处理机上顺序执行时所发生的活动.操作系统中,几乎所有运行中的任务对应一条进程(Process).一个程序进入内存运行,即变成一 ...

  6. Auto.js零基础入门_安卓全分辨率免ROOT引流脚本开发教程

    为什么要学脚本? 目前世面上面大部分的脚本都是模拟器运行的,因为脚本是看机型的,比如你在这款手机上面写的脚本,放到其他手机就用不了.所以你如果要做自己手机上面用的脚本的话,就必须要自己写脚本,并且现在 ...

  7. python如何停止子线程_【已解决】python 如何结束子线程呢

    复制内容到剪贴板 代码:# -*- coding:utf-8 -*- import wx import os import sys import configparser import ftpserv ...

  8. 【Auto.js】[系统Intent]_系统设置页面的相关intent跳转

    收集了一些系统设置界面的Intent跳转,只收集了不传值,可直接调用一些参数 var intent = new Intent(); // vpnIntent.setAction("andro ...

  9. Auto.js协议实战脚本_抓包(实战二)

    到此,前期准备工作完成,开始正式的逻辑功能分析及代码编写. 引流平台之"攒攒(流量平台)" 登录,由于后续的所有功能操作都基于登录平台后取得的token,所以我们先分析登录接口,获 ...

最新文章

  1. pip在windows下安装配件/宏包
  2. 自律到极致-人生才精致:第11期
  3. 视频 + PPT | 财富管理转型,券商如何精细化运营?
  4. 跋山涉水——深入 Redis 字典遍历
  5. php中怎么函数加字符串,如何使用PHP中的字符串函数
  6. python3 自定义排序_Python3中的自定义排序
  7. Java好还是Python好?一张图告诉你!
  8. c语言getchar的作用,c=getchar()!='\n'到底什么用呢
  9. 网页调用exe程序传参
  10. VB.NET外部程序调用总结下
  11. Android腾讯微博开放平台入门(四)发表一条文字微博
  12. CAD中把样条曲线改成多线段
  13. Android流光动画,流光相机app_流光相机官网-多特软件站安卓网
  14. U3D 简化版跳一跳小游戏 实现(新手入门) (附源码下载链接,整个工程文件)
  15. vite中antdesign-vue3的使用
  16. android获取wifi支持的信道,Android获取当前连接wifi的信道
  17. java 基于微信小程序的饭店外卖点餐系统 uniapp小程序
  18. 零基础Linux搭建虚拟专用网络(实现游戏局域网联机)
  19. 〖Python WEB 自动化测试实战篇⑤〗- selenium 元素定位详解 - (八大元素定位方式)
  20. 千字长文讲解系统架构,系统设计看这篇就够了

热门文章

  1. php 完整redis类,PHP Redis类
  2. php模块出现警告,PHP警告:模块已在第0行的Unknown中加载
  3. python安装找不到.log的文件_python – logger找不到文件
  4. 标准h5的定位_不但亲民还安全 红旗H5车门/防撞梁拆解
  5. WebSocket 入门及开源库
  6. 【机器学习-西瓜书】三、逻辑回归(LR);线性判别分析(LDA)
  7. 数据结构实验 6.宗教信仰
  8. 【题解】(图论) —— POJ 0719:拓扑排序
  9. 《深度学习笔记》——在训练过程中出现nan的调试笔记
  10. Python——print()函数的学习笔记