Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python不能杀死进程_Python_Multithreading_Multiprocessing - Fatal编程技术网

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

我有以下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
我想在“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()
-实现的方法,在事件变为
真之前阻止线程。通过这种方式,您可以非常轻松地同步、暂停和恢复线程。它在线程和进程中可用。以下是一些示例: