终止无限循环



我正试图创建一个并行运行无限循环的程序,并在被告知时退出循环。具体地,无限循环在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。

相关内容

  • 没有找到相关文章

最新更新