背景
我希望一个脚本新增数据到数据表中,再启动另一个脚本更新数据表的字段,但是每次启动两个脚本太麻烦了,我就想能不能一个启动一个脚本同时执行两个任务。
通过AI的帮助,写了下面的启动和清理多进程的代码块。感觉后续还会用到,做下记录。
import multiprocessing
import time
from loguru import logger
import signal
# 子进程任务
def function_a(stop_event):
while not stop_event.is_set():
logger.info("正在新增数据到数据库...")
time.sleep(2)
logger.info("function_a 已停止")
def function_b(stop_event):
while not stop_event.is_set():
logger.info("正在更新数据库字段...")
time.sleep(3)
logger.info("function_b 已停止")
def handle_exit(signum, frame):
logger.info("\n收到中断信号,正在准备退出程序...")
stop_event_a.set()
stop_event_b.set()
if __name__ == "__main__":
# 创建停止信号
stop_event_a = multiprocessing.Event()
stop_event_b = multiprocessing.Event()
# 注册信号处理器
signal.signal(signal.SIGINT, handle_exit)
# 创建进程
process_a = multiprocessing.Process(target=function_a, args=(stop_event_a ,))
process_b = multiprocessing.Process(target=function_b, args=(stop_event_b ,))
# 启动进程
process_a.start()
process_b.start()
try:
# 主进程保持运行
process_a.join()
process_b.join()
except KeyboardInterrupt:
logger.info("程序手动中断")
finally:
# 设置停止信号并等待子进程退出
stop_event_a.set()
stop_event_b.set()
process_a.join()
process_b.join()
logger.info("已清理所有子进程并退出程序。")转载请注明出处