首页 > 解决方案 > 终止无限循环

问题描述

我正在尝试创建一个并行运行无限循环并在被告知时退出循环的程序。具体来说,无限循环在square函数中,并且在 时给出退出信号shv='STOP'。当所有进程读取该信号时,将不得不退出无限循环并返回。

问题是即使发出信号Processes也不会关闭。STOP

一些注意事项:

编码:

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)

出于某种原因,print(processes)即使我设置了以下两种情况,这段代码也会给出以下内容shv.value = stopphrase

[<Process name='Process-1' pid=9664 parent=6084 started>, <Process name='Process -2' pid=10052 parent=6084 started>]

请让我知道该问题的进一步改进或详细信息。

标签: pythonmultiprocessinginfinite-loop

解决方案


我认为您的意思是在每个进程上都有一个调用“join()”的循环。

for p in processes:
    p.join()

而不是只对其中一个调用终止。


推荐阅读