我有以下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()
,但我无法杀死这个过程。
多处理是正确的方法吗?有谁能告诉我,我错过了什么?任何提示都表示赞赏。
答案 0 :(得分:1)
问题的解决方案取决于您的流程3
和l
正在执行的操作(=>您的函数n
和func1
。
在您的示例中,每个函数都有一个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
处于同一过程中,而consumer
和func1
处于不同的流程中。这是你的意图吗?