1. 程式人生 > >Python多執行緒/多程序操作佇列

Python多執行緒/多程序操作佇列

最近在做深度學習,需要採用多程序的方式實現資料處理。為了實現資料的快速處理,我先後嘗試了把資料一口氣讀入記憶體、多執行緒和多程序的方式。當然,肯定是多程序雙佇列的方式最好,因為可以充分利用多核和cpu。

一般來說匯入佇列可以這樣操作:

import Queue
myqueue = Queue.Queue(100)

但是這種佇列不是同步佇列,在多程序中不能用於通訊。

在多程序中,需要這樣使用:

from multiprocessing import Process, Queue
myqueue = Queue(100)
舉一個例子:
#! /usr/bin/env python

from multiprocessing import Process, Queue
from time import sleep

def pro1(num):
    num.put([1,1])

def pro2(num):
    sleep(2)
    print num.qsize()

if __name__ == '__main__':
    num = Queue()
    process1 = Process(target = pro1, args = (num,))
    process1.start()
    process2 = Process(target = pro2, args = (num,))
    process2.start()
結果為:1
而使用多執行緒,則方法如下:
#! /usr/bin/env python

import threading
from time import sleep
import Queue

def pro1():
    num.put([1,1])

def pro2():
    sleep(2)
    print num.qsize()

if __name__ == '__main__':
    num = Queue.Queue()
    thread1 = threading.Thread(target = pro1)
    thread1.start()
    thread2 = threading.Thread(target = pro2)
    thread2.start()

結果為:1

當然,tensorflow等深度學習框架的資料輸入還是應該通過多程序的方式實現。這個後續再說。