Python无法杀死进程

时间:2016-11-21 07:37:43

标签: python multithreading multiprocessing

我有以下python代码:

main(): 
  t1 = Thread(target=consumer, args=(q,))

  t2 = Thread(target=server, args=(q,))
  t1.start()
  t2.start()

def server(q):
  while(1):

    # Produce some data
    data = s.recv(1000)
    q.put(data)
def consumer(in_q):
    while True:
        data = in_q.get()

        if(data.__len__() >0):
            pieces = data.split("\t")

            if 'L' in pieces[0]:
                l = multiprocessing.Process(target=fun1())
                l.start()
                n.terminate()
                n.join()

            elif 'N' in pieces[0]:
                n = multiprocessing.Process(target=fun2())
                n.start()
                l.terminate()
                l.join()
def func1():
while(1):
   //Do something


def func2():
while(1):
   //Do something code here

我想杀死或停止这个过程" l"什么时候" n"正在运行,反之亦然。我试过.terminate(),但我无法杀死这个过程。

多处理是正确的方法吗?有谁能告诉我,我错过了什么?任何提示都表示赞赏。

1 个答案:

答案 0 :(得分:1)

问题的解决方案取决于您的流程3l正在执行的操作(=>您的函数nfunc1

在您的示例中,每个函数都有一个func2函数,因此可用于控制您的过程。在您的情况下,您可以滥用while。它旨在暂停进程,而不是终止进程。但它应该按要求工作。

multiprocessing.event

然而,您对线程和进程的混合是值得怀疑的。您的import multiprocessing as mp def consumer(in_q): #create events for communication with processes, initialized as 'False' event_n = mp.event() event_l = mp.event() while True: data = in_q.get() if(data.__len__() >0): pieces = data.split("\t") if 'L' in pieces[0]: l = multiprocessing.Process(target=func1, args=event_l) l.start() event_n.set() #set True and signal process n to stop n.join() elif 'N' in pieces[0]: n = multiprocessing.Process(target=func2, args=event_n) n.start() event_l.set() #set True and signal process l to stop l.join() def func1(event_l): while(!event_l): #do as long event_l == False //Do something event_l.clear() #set false return def func2(event_n): while(!event_n): #do as long event_n == False //Do something code here event_n.clear() #set false return server处于同一过程中,而consumerfunc1处于不同的流程中。这是你的意图吗?