2
대상 기능이 입력 및 출력 대기열을 사용하는 객체가 multiProcessing.Process
입니다.포인터가있는 다중 처리 및 ctype
출력 대기열에는 내부 포인터가있는 랩된 ctypes 구조 인 일부 데이터가 있습니다. 물론, 데이터를 직렬화해야 pickle
모듈은, 나누기 :
ValueError: ctypes objects containing pointers cannot be pickled
어떻게 든 파일로 덤프없이 내 자식 프로세스에서 나의하는 ctypes 포인터 구조를받을 수 있습니까? 당신이 모든 프로세스는 자신의 주소 공간이 멀티 프로세싱을 사용하면
코드는
# -*- coding: utf-8 -*-
import multiprocessing as mp
from liblinear import *
from liblinearutil import *
def processTarget(inQueue, outQueue):
while(not inQueue.empty()):
inVal = inQueue.get()
#training model
y, x = [1,-1], [{1:inVal, 3:3*inVal}, {1:-1,3:-1}]
prob = problem(y, x)
param = parameter('-c 4 -B 1')
m = train(prob, param)
outQueue.put((inVal * 2, m))
print "done", inVal
inQueue.task_done()
def Main():
processes = []
inQueue = mp.JoinableQueue()
for i in xrange(10):
inQueue.put(i)
outQueue = mp.JoinableQueue()
for i in xrange(5):
process = mp.Process(target=processTarget, args=(inQueue, outQueue))
print "starting", i
process.start()
print "started", i
inQueue.join()
print "JOINED"
while(not outQueue.empty()):
print outQueue.get()
if __name__ == '__main__':
Main()