gpt4 book ai didi

python - 如何使 APScheduler ProcessPoolExecutor 在完成后关闭进程并且只生成它需要的进程?

转载 作者:行者123 更新时间:2023-12-05 07:18:22 26 4
gpt4 key购买 nike

ProcessPoolExecutor 生成一堆处理 apscheduler 作业的进程。我希望 ProcessPoolExecutor 生成的进程在成功完成作业后实际关闭,并为下一次执行所述作业生成一个新进程。如果没有必要,我也希望不要生成进程。然而,这不会发生。如果我将 max workers 设置为 10,将产生 10 个进程。即使唯一的作业的 max_instances 为 3。在其中一个进程完成该作业后,该进程不会被回收,而只是重新用于该作业的下一次运行。

我举个例子:

使用 BlockingScheduler 创建一个 apscheduler,使用 ProcessPoolExecutor 作为它的执行器。

def printing_job():
print("print this...")

def main():
executors = {
'default': ProcessPoolExecutor(max_workers=10)
}
job_defaults = {
'coalesce': False,
'max_instances': 3,
'misfire_grace_time': None
}
scheduler = BlockingScheduler(executors=executors,
daemonic=True,
daemon=True)
scheduler.add_job(printing_job, 'interval', seconds=1)
scheduler.start()

产生了 11 个进程,10 个调度程序进程和主进程:

user   61428  59435 18 16:25 pts/2    00:00:00 ../bin/python3 ./test.py
user 61456 61428 0 16:25 pts/2 00:00:00 ../bin/python3 ./test.py
user 61457 61428 0 16:25 pts/2 00:00:00 ../bin/python3 ./test.py
user 61458 61428 0 16:25 pts/2 00:00:00 ../bin/python3 ./test.py
user 61459 61428 0 16:25 pts/2 00:00:00 ../bin/python3 ./test.py
user 61460 61428 0 16:25 pts/2 00:00:00 ../bin/python3 ./test.py
user 61461 61428 0 16:25 pts/2 00:00:00 ../bin/python3 ./test.py
user 61462 61428 0 16:25 pts/2 00:00:00 ../bin/python3 ./test.py
user 61463 61428 0 16:25 pts/2 00:00:00 ../bin/python3 ./test.py
user 61464 61428 0 16:25 pts/2 00:00:00 ../bin/python3 ./test.py
user 61465 61428 0 16:25 pts/2 00:00:00 ../bin/python3 ./test.py

作业仅使用了 3 个。我最多应该看到 4 个过程。这些过程应该被收割并重新创建。

APScheduler 无法实现这种范例吗?

ProcessPoolExecutor 指出 max_workers 是最多 生成的 worker 数量。关键词最多,对我来说意味着它不应该产生比它需要的更多。

最佳答案

我或多或少地解决了这个问题,方法是自定义一个函数来概括我想要执行的并行和/或并发进程的类型。在该函数中,您可以执行与此处希望的操作相同的操作。我无法以任何其他方式解决此问题。

关于python - 如何使 APScheduler ProcessPoolExecutor 在完成后关闭进程并且只生成它需要的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58332356/

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