gpt4 book ai didi

python - 如何使我的代码可停止? (不杀死/打断)

转载 作者:太空狗 更新时间:2023-10-30 01:04:11 27 4
gpt4 key购买 nike

我在更广泛的范围内问这个问题,因为我现在没有面临这个具体问题,但我想知道将来该怎么做。

如果我有一个长时间运行的 python 脚本,它应该一直在做某事(如果有帮助的话,可以是一个无限循环)。通过在终端上运行 python main.py 命令启动代码。

代码没有结尾,所以不会有sys.exit()

我不想使用 KeyboardInterrupt,也不想终止任务。因为这些选项很突然,而且您无法准确预测在什么时候停止代码.

当我最终决定关闭代码时,有没有办法“软”终止代码?例如使用另一个命令、准备一个类或运行另一个脚本?

这方面的最佳做法是什么?

PS.:请记住,我是一名编码新手。

编辑:我正在添加一些通用代码,以使我的问题更清楚。

import time,csv

import GenericAPI

class GenericDataCollector:
def __init__(self):
self.generic_api = GenericAPI()

def collect_data(self):
while True: #Maybe this could be a var that is changed from outside of the class?
data = self.generic_api.fetch_data() #Returns a JSON with some data
self.write_on_csv(data)
time.sleep(1)

def write_on_csv(self, data):
with open('file.csv','wt') as f:
writer = csv.writer(f)
writer.writerow(data)

def run():
obj = GenericDataCollector()
obj.collect_data()

if __name__ == "__main__":
run()

在这种特殊情况下,该类正在从一些通用 API(以 JSON 格式提供)收集数据,并将其写入 csv 文件,在一个无限循环中。我如何编写一种方法(方法?)来停止它(当调用 uppon 时,如此意外),而不会突然中断(Ctrl+C 或终止任务)。

最佳答案

我建议使用 signal 模块。这允许您处理信号中断 (SIGINT) 并在退出前清理程序。以下面的代码为例:

import signal

running = True

def handle(a, b):
global running
running = False

# catch the SIGINT signal and call handle() when the process
# receives it
signal.signal(signal.SIGINT, handle)

# your code here
while running:
pass

您仍然可以使用 Ctrl+C 退出,但是您在 while 循环中放入的内容不会被中途切断。

关于python - 如何使我的代码可停止? (不杀死/打断),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56980734/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com