首页 > 解决方案 > 如何中断python中正在运行的并行进程?

问题描述

我想从其中一个 defs 中退出并行进程(使用返回?),以便程序在此代码的最后一行之后继续:

from threading import Thread

def measureBT():
    try:
        ...
        return True
    except TimeoutException:
        ...
        return False

def measureWiFi():
    ...


thread_MeasureBT = Thread(target=measureBT)
thread_MeasureWiFi = Thread(target=measureWiFi)

thread_MeasureBT.start()
thread_MeasureWiFi.start()

thread_MeasureWiFi.join()
thread_MeasureBT.join()

标签: pythonpython-3.xparallel-processing

解决方案


“我想从其中一个def-s... 中退出并行进程,以便程序在此代码的最后一行之后继续:”

这个想法很清楚,方法是非常错误的。

如果这被用于美国宇航局的阿波罗登月计划,那么在 Mare Tranquillitatis 将会有第一个非地球坟墓。

永远不要像上面假设的那样尝试依赖进程/线程终止/完成。

更好地创建一个合作代理结构,一个(或多个,对于更容错的系统)负责任何和所有独立的 BT 测量,另一个(同样独立于任何其他代理、资源或处理)一个负责所有WiFi 测量。

这样,如果出现问题(而且经常出现问题,通常是在最糟糕的时刻,例如在登月期间,当雷达开始向中央 AGC 计算机发送错误信号时,如果它不是为了智能和玛格丽特·汉密尔顿女士的勇敢工作,她将如何控制复杂系统的原理重新设计为一组独立可控、非阻塞、相互{dead-|live-|panic-attack-}-locking 的集合实体,任务将变成全世界观看的月球葬礼)。

因此,最好将关注点分开,一个用于 BR,另一个用于 WiFi,并保持主进程与它们通信,无论是使用基于 O/Snanomsg/pynng还是 ZeroMQ /pyzmq通信框架,都可以帮助您创建一个健壮的、非-使用可用于本地甚至非本地代理间通信的TransportClass中的一个或所有来阻塞这种ipc://tcp://

在那里,您将及时获得所有最新读数(与远程代理如何获取它们无关),如果您的设计更接近,甚至有机会解决任何此类情况,例如错误读数或丢失数据半个世纪前,玛格丽特·汉密尔顿女士为美国宇航局展示的原则。


对所有 MIT 团队的人类英雄和关于 Art-of- (可靠的) -Code-Design的讲座的终极尊重


推荐阅读