完成后,子进程不会将控制权返回给主进程

时间:2015-05-16 01:27:01

标签: python join locking queue multiprocessing

我有一个Python应用程序,我使用进程来计算分类。对于通信进程使用队列。一切正常,但在完成所有子流程之后,主流程无法获得控制权。所以,据我所知,子流程没有终止。但是,为什么?

#!/usr/bin/python
from wraper import *
from multiprocessing import Process, Lock,Queue

def start_threads(data,counter,threads_num,reporter):
    threads = []
    d_lock = Lock()
    c_lock = Lock()
    r_lock = Lock()
    dq = Queue()
    rq = Queue()
    cq = Queue()

    dq.put(data)
    rq.put(reporter)
    cq.put(counter)

    for i in range(threads_num):
        t = Process(target=mule, args=(dq,cq,rq,d_lock,c_lock,r_lock))
        threads.append(t)

    for t in threads:
        t.start()

    for t in threads:
        t.join()

    return rq.get()



def mule(dq,cq,rq,d_lock,c_lock,r_lock):
    c_lock.acquire()
    counter = cq.get()
    can_continue = counter.next_ok()
    idx = counter.get_features_indeces()
    cq.put(counter)
    c_lock.release()

    while can_continue:
        d_lock.acquire()
        data = dq.get()
        labels, features = data.get_features(idx)
        dq.put(data)
        d_lock.release()

    accuracy = test_classifier(labels, features)

    r_lock.acquire()
    reporter = rq.get()
    reporter.add_result(accuracy[0],idx)
    rq.put(reporter)
    r_lock.release()


    c_lock.acquire()
    counter = cq.get()
    can_continue = counter.next_ok()
    idx = counter.get_features_indeces()
    cq.put(counter)
    c_lock.release()

print('done' )

它为每个进程写道它完成了它的工作,就是它......

0 个答案:

没有答案