如何在满足给定条件时终止 python 中的多进程?
How to terminate a multiprocess in python when a given condition is met?
假设我有以下功能:
def f():
while True:
x = generate_something()
if x == condition:
return x
if __name__ == '__main__':
p=Pool(4)
我想运行在多进程中使用这个函数,当其中一个进程满足我的函数条件时,我希望所有其他进程停止。
您可以在 multiprocessing
中使用 event
和 terminate
,因为您希望在子进程之一满足条件后停止所有进程。
检查下面的工作示例,我在其中创建了两个进程,这些进程将检查变量 x
的值是否为 5。
有一次,其中一个进程将 x
的值设置为 5
,事件被设置。
Event
是 set
或 unset
在 main
代码中连续检查。
代码:
import random
import multiprocessing
import sys
import time
def generate_something():
return random.choice(range(10))
def f(event):
while True:
x = generate_something()
print "Value is ",x
if x == 5:
print "Got what I am searching for."
event.set()
time.sleep(2)
if __name__ == '__main__':
jobs = []
#Create Event
event = multiprocessing.Event()
#Create two processes
for i in range(2):
p = multiprocessing.Process(target=f,args=(event,))
p.start()
jobs.append(p)
#Check whether event is set or not
#When set close all child processes
while True:
if event.is_set():
print "Exiting all child processess.."
for i in jobs:
#Terminate each process
i.terminate()
#Terminating main process
sys.exit(1)
time.sleep(2)
输出:
"C:\Program Files (x86)\Python27\python.exe" C:/Users/punddin/PycharmProjects/demo/a.py
Value is 4
Value is 2
Value is 7
Value is 6
Value is 3
Value is 4
Value is 8
Value is 3
Value is 8
Value is 1
Value is 9
Value is 9
Value is 1
Value is 6
Value is 5
Got what I am searching for.
Value is 6
Exiting all processess..
假设我有以下功能:
def f():
while True:
x = generate_something()
if x == condition:
return x
if __name__ == '__main__':
p=Pool(4)
我想运行在多进程中使用这个函数,当其中一个进程满足我的函数条件时,我希望所有其他进程停止。
您可以在 multiprocessing
中使用 event
和 terminate
,因为您希望在子进程之一满足条件后停止所有进程。
检查下面的工作示例,我在其中创建了两个进程,这些进程将检查变量 x
的值是否为 5。
有一次,其中一个进程将 x
的值设置为 5
,事件被设置。
Event
是 set
或 unset
在 main
代码中连续检查。
代码:
import random
import multiprocessing
import sys
import time
def generate_something():
return random.choice(range(10))
def f(event):
while True:
x = generate_something()
print "Value is ",x
if x == 5:
print "Got what I am searching for."
event.set()
time.sleep(2)
if __name__ == '__main__':
jobs = []
#Create Event
event = multiprocessing.Event()
#Create two processes
for i in range(2):
p = multiprocessing.Process(target=f,args=(event,))
p.start()
jobs.append(p)
#Check whether event is set or not
#When set close all child processes
while True:
if event.is_set():
print "Exiting all child processess.."
for i in jobs:
#Terminate each process
i.terminate()
#Terminating main process
sys.exit(1)
time.sleep(2)
输出:
"C:\Program Files (x86)\Python27\python.exe" C:/Users/punddin/PycharmProjects/demo/a.py
Value is 4
Value is 2
Value is 7
Value is 6
Value is 3
Value is 4
Value is 8
Value is 3
Value is 8
Value is 1
Value is 9
Value is 9
Value is 1
Value is 6
Value is 5
Got what I am searching for.
Value is 6
Exiting all processess..