我正试图创建一个并行运行无限循环的程序,并在被告知时退出循环。具体地,无限循环在square
函数中,并且当shv='STOP'
时给出退出信号。当所有进程读取时,该信号将不得不退出无限循环并返回。
问题在于,即使在给出STOP
信号之后,Processes
也不闭合。
一些注意事项:
- 与多处理代码的许多实例一样,此代码在终端中运行,而不是在IDE中运行
代码:
import multiprocessing as mp
import time
import ctypes
def square(x, shv):
while shv.value != 'STOP':
time.sleep(3)
print(shv.value)
else:
print('stopped')
return
if __name__ == '__main__':
stopphrase = 'STOP'
proecess_num = 2
shv = mp.Value(ctypes.c_wchar_p, '')
processes = [mp.Process(target=square, args=(i, shv)) for i in range(proecess_num)]
for p in processes:
p.start()
print('Mapped & Started')
print(processes)
while shv.value != stopphrase:
inp = input('Type STOP and press Enter to terminate: ')
if inp == stopphrase:
shv.value = stopphrase
time.sleep(2)
p.terminate()
print(processes)
出于某种原因,即使我设置了shv.value = stopphrase
,该代码在print(processes)
的两种情况下都给出了以下内容:
[<Process name='Process-1' pid=9664 parent=6084 started>, <Process name='Process -2' pid=10052 parent=6084 started>]
请让我知道进一步的改进或问题的细节。
我认为您的意思是在每个进程上都有一个调用"join(("的循环。
for p in processes:
p.join()
而不是仅对其中一个调用terminate。