Python不能杀死进程
我有以下python代码:Python不能杀死进程,python,multithreading,multiprocessing,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): w
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
我想在“n”运行时终止或停止进程“l”,反之亦然。我尝试了.terminate()
,但无法终止进程
多处理是正确的方法吗?谁能告诉我我错过了什么?任何提示都非常感谢。问题的解决取决于进程
l
和n
所做的工作(=>函数func1
和func2
)
在您的示例中,每个进程中都有一个while
函数,可以用来控制您的进程。在您的示例中,您可以滥用多处理.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
但是,线程和进程的混合是有问题的。您的
服务器
和消费者
在同一个进程中,而func1
和func2
在不同的进程中。这是您的意图吗?看到了:您的示例几乎是正确的,但缺少了一些需要帮助的东西。祝您好运k、 在您的代码中:s从未定义,q从未定义,n未在“if L”块中定义,L未在“if n”块中定义block.有一个工作示例,这样我们可以进行推理。感谢您的回答。不,这不是故意的。我最初尝试使用不同的进程,但不起作用时,我尝试使用相同的进程。您能否详细说明multiprocessing.event,因为我是初学者。event对象(线程和进程相同)是一种非常简单的同步和控制进程的方法。请参见此处:通过标记事件True
(调用event.set()
),主线程可以控制一个或多个工作线程。这些工作线程具有事件。wait()
-实现的方法,在事件变为真之前阻止线程。通过这种方式,您可以非常轻松地同步、暂停和恢复线程。它在线程和进程中可用。以下是一些示例: