python - 终止无限循环
问题描述
我正在尝试创建一个并行运行无限循环并在被告知时退出循环的程序。具体来说,无限循环在square
函数中,并且在 时给出退出信号shv='STOP'
。当所有进程读取该信号时,将不得不退出无限循环并返回。
问题是即使发出信号Processes
也不会关闭。STOP
一些注意事项:
- 与多处理代码的许多实例一样,此代码在终端而不是 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)
出于某种原因,print(processes)
即使我设置了以下两种情况,这段代码也会给出以下内容shv.value = stopphrase
:
[<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()
而不是只对其中一个调用终止。
推荐阅读
- scala - 为什么我在 AWS EMR 上的 Flink 流作业在本地迷你集群上运行?
- python - Python 版本的 WordCount 在 Flink 上失败
- reactjs - React.useEffect 如何在其第二个参数中区分项目
- php - 如果单击取消,为什么我的确认框会给出相同的结果?
- android - Android 谷歌地图在签名 APK 中为空白
- python - 无法从 'html' 导入名称 'HTML' 。Python 3.7.4
- c# - 如何以 Web 表单加载本地 html 页面
- python - 如何简单地设置数据框以包含结果?
- prolog - Clojure core.logic 的简单 Prolog
- sql-server - 需要有关 SQL 查询的帮助 - 合并 AVG