最近在做深度学习,需要采用多进程的方式实现数据处理。为了实现数据的快速处理,我先后尝试了把数据一口气读入内存、多线程和多进程的方式。当然,肯定是多进程双队列的方式最好,因为可以充分利用多核和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()
而使用多线程,则方法如下:
#! /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等深度学习框架的数据输入还是应该通过多进程的方式实现。这个后续再说。