簡體   English   中英

終止無限循環

[英]Terminate infinite loop

我正在嘗試創建一個並行運行無限循環並在被告知時退出循環的程序。 具體來說,無限循環在square function 中,當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()

而不是只對其中一個調用終止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM