TensorFlow中的多執行緒
正文共1699個字,2張圖,預計閱讀時間5分鐘。
TensorFlow提供兩個類幫助實現多執行緒,一個是tf.train.Coordinator,另一個是tf.train.QueueRunner。Coordinator主要用來實現多個執行緒同時停止,QueueRunner用來建立一系列執行緒。
Coordinator根據官方文件,Coordinator主要有三個方法:
1、tf.train.Coordinator.should_stop: returns True if the threads should stop.
2、tf.train.Coordinator.request_stop: requests that threads should stop.
3、tf.train.Coordinator.join: waits until the specified threads have stopped.
接下來我們實驗Coordinator,下面的程式碼主要實現每個執行緒獨立計數,當某個執行緒達到指定值的時候,所有執行緒終止:
#encoding=utf-8
import threading
import numpy as np
import tensorflow as tf
#建立一個函式實現多執行緒,引數為Coordinater和執行緒號
deffunc(coord, t_id):
count = 0
whilenot coord.should_stop():
print('thread ID:',t_id, 'count =', count)
count += 1
if(count == 5): #計到5時請求終止
coord.request_stop()
coord = tf.train.Coordinator()
threads = [threading.Thread(target=func, args=(coord, i)) for i in range(4)]
#開始所有執行緒
for t in threads:
t.start()
coord.join(threads) #等待所有執行緒結束
執行結果如下,當0號執行緒打印出4時,其他執行緒不再計數,程式終止。
QueueRunner的作用是建立一些重複進行enqueue操作的執行緒,它們通過coordinator同時結束。
#encoding=utf-8
import numpy as np
import tensorflow as tf batch_size = 2
#隨機產生一個2*2的張量
example = tf.random_normal([2,2])
#建立一個RandomShuffleQueue,引數意義參見API
q = tf.RandomShuffleQueue( capacity=1000, min_after_dequeue=0, dtypes=tf.float32, shapes=[2,2])
#enqueue op,每次push一個張量
enq_op = q.enqueue(example)
#dequeue op, 每次取出batch_size個張量
xs = q.dequeue_many(batch_size)
#建立QueueRunner,包含4個enqueue op執行緒
qr = tf.train.QueueRunner(q, [enq_op]*4) coord = tf.train.Coordinator() sess = tf.Session()
#啟動QueueRuner,開始執行緒
enq_threads = qr.create_threads(sess, coord=coord, start=True)for i in range(10):
if coord.should_stop():
break print('step:', i, sess.run(xs))
#列印結果
coord.request_stop() coord.join(enq_threads)
總結這兩個類是實現TensorFlow pipeline的基礎,能夠高效地並行處理資料。個人認為在資料較大時,應該避免使用feed_dict。因為,feed_dict是利用python讀取資料,python讀取資料的時候,tensorflow無法計算,而且會將資料再次拷貝一份。
原文連結:https://www.jianshu.com/p/c29965e6c40c
查閱更為簡潔方便的分類文章以及最新的課程、產品資訊,請移步至全新呈現的“LeadAI學院官網”:
www.leadai.org
請關注人工智慧LeadAI公眾號,檢視更多專業文章
大家都在看
相關推薦
執行緒池中多執行緒設定超時退出監控
前言 在寫多執行緒程式時,大多數情況下會先excutor建立執行緒池,然後再建立執行緒,但是對一些讀資料庫或者其他IO操作,容易堵住執行緒,此時就需要給執行緒設定超時時間,幹掉超時的執行緒再重新拉起一個執行緒來,但是java執行緒建立並沒有預留超時引數,研究了一下網上也沒找到
觀察者模式中多執行緒執行訂閱事件並順序執行的問題
對事件釋出訂閱模式中啟動執行緒執行操作,但又要保證執行緒順序執行的一些思考和實踐,在開發過程中,經常會遇到需要使用事件來觸發方法執行的情況,比如CS中按鈕的點選事件,滑鼠移動事件,鍵盤監聽事件等等,有時候需要執行比較耗時的任務,但並不希望阻塞主執
Spring4.x中多執行緒使用
直接上程式碼: 一:配置類 import java.util.concurrent.Executor; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springfram
java中多執行緒一定快嗎?看完就知道!!!
理解上下文切換 即使是單核處理器也支援多執行緒執行程式碼,CPU通過每個執行緒分配CPU時間片來實現這個機制.時間片是CPU分配給多個執行緒的時間,因為時間片非常短,所以CPU通過不停的切換執行緒執行,讓我們感覺多個執行緒是同時執行的,時間片一般是幾十毫秒(ms).
Python中多執行緒總結
Python中的多執行緒 多執行緒 一個程序中有多個執行緒就是多執行緒。 一個程序中至少有一個執行緒,並作為程式的入口,這個就是主執行緒。一個程序至少有一個主程序,其他執行緒稱為工作執行緒。 執行緒安全:執行緒執行一段程式碼,不會產生不確定的結果,那這段程式碼就是執行緒安全。(例如pr
python(2.7)中多執行緒使用舉例
python(2.7)中多執行緒使用舉例 python27中多執行緒使用舉例 下邊的程式碼都不難理解,不做多餘解釋。唯一有困惑的地方已經在原始碼中註釋說明。這裡也不做多執行緒編碼知識的講解。把這幾種形式(主要是第三種)練成muscle mem
python中多執行緒中event的使用-----------------即一個靈活的方法標誌位,類似於java的等待喚醒機制(python與java不同的地方)
event是python中一個特有的標誌位方法,他一共有三種方法 1.event.wait():如果標誌位設定了,它不做任何事,如果沒有設定,則將會鎖住,等待標誌位的設定 2.event.set():設定標誌位 3.event.clear():清除標誌位 這一種機制很
python中多執行緒開啟的兩種方式(內含有event的應用,即安全的機制,類似於java的等待喚醒機制,不會出現多個執行緒之間的錯亂問題)
event是類似於java中的等待喚醒機制,具體方法參照上一篇CSDN 下面來介紹開啟執行緒的第一種方式 #Filename:threading1.py #開啟執行緒的第一種方式 import threading import time event=threadin
Android中多執行緒通訊:Handler的理解
Android中的Handler Android中Handler在我理解主要是為了解決執行緒間通訊。 使用Android的Handler機制主要要了解幾個類: Looper: 一個執行緒對應一個或者0個Looper,主執行緒在ActivityThread的時候會預設建立一個L
以單例模式為例,在Idea中多執行緒debug
我們以單例模式的懶漢式在idea中進行多執行緒debug 一是可以學習多執行緒debug,二是可以瞭解懶漢式的執行緒不安全的原因 首先我們建立一個單例懶漢式,然後建立兩個執行緒 程式碼如下: 然後 進行多執行緒debug,來干預懶漢式的執行順序
python中多執行緒與多程序的選擇問題
多執行緒與多程序的選擇問題 既然python中多執行緒和多程序都能夠進行非同步操作,那麼到底應該如何選擇 首先我們必須知道GIL全域性解釋鎖對執行緒的影響,其同一時間只能夠允許一個執行緒進入cpu進行執行,因此對於cpu密集型的程式並不適用於多執行緒操作 cpu密集型的功能對cp
Java中多執行緒併發體系知識點彙總
一、多執行緒 1、作業系統有兩個容易混淆的概念,程序和執行緒。 程序:一個計算機程式的執行例項,包含了需要執行的指令;有自己的獨立地址空間,包含程式內容和資料;不同程序的地址空間是互相隔離的;程序擁有各種資源和狀態資訊,包括開啟的檔案、子程序和訊號處理。 執行緒:表示程
linux下一個程序中多執行緒的資源共享
在說執行緒資源共享之前,我們先來說來說一下執行緒的概念,執行緒是程序內部的一條執行序列(即執行流),一個程序至少有一個執行緒,即main函式代表的執行流。當然我們也可以通過執行緒庫來建立新的執行緒,這種執行緒我們稱之為函式執行緒,同一個程序中的所有普執行緒是併發執行的。而這些
java中多執行緒的建立和啟動(1)
多執行緒概述 1.什麼是多執行緒 執行緒是程式執行的一條路徑,一個程序中可以包含多條執行緒;多執行緒併發執行可以提高程式的效率 2.程序和執行緒之間的關係 作業系統可以同時執行多個任務,每個任務就是程序;程序可以同時執行多個任務,每個任務就是執
Java進階(四十二)Java中多執行緒使用匿名內部類的方式進行建立3種方式
Java中多執行緒使用匿名內部類的方式進行建立3種方式 package cn.edu.ujn.demo; // 匿名內部類的格式: public class ThreadDemo {
C++中多執行緒的加鎖機制
問題來源於某面試題: 編寫一個單例模式的類。 #include<iostream> #include<cstdio> #include<cstdlib> using namespace std; class singleStance{
for迴圈中多執行緒的無序性
在學習多執行緒的互斥與同步中遇到一個問題,如下:public class Test { static int i; public static void main(String[] args) { for(i=0; i<10; i++){ new Thread
Java中多執行緒交替列印
一、兩執行緒交替列印數字和字母 要求控制檯中輸出的內容為 A1B2C3D4 這應該是多執行緒面試題中推簡單的筆試題了吧; 1.Object. notify()和Object.wait()實現; private void init (){ char
c++11中多執行緒中Join函式
寫在前面 Join函式作用: Join thread The function returns when the thread execution has completed.//直到執行緒完成函式才返回 This synchronizes the moment t
Pyqt5 中多執行緒的編寫方法
對於執行緒的概念就不在此處進行詳細的說明了,下面就說明如何使用: 對於你想要多執行緒的執行的邏輯業務,你都需要例項化一個執行緒物件: class WorkThread(QThread): trigger = pyqtSignal() def __int_