gpt4 book ai didi

Python Processpoolexecutor - 杀死队列?

转载 作者:行者123 更新时间:2023-12-04 17:47:00 34 4
gpt4 key购买 nike

这是我关于 stackoverflow 的第一个问题。我基本上能够在这里找到我需要知道的东西。顺便说一句,非常感谢。

但是。如果我尝试终止我的 ProcessPoolExecutor,它只会在生成的整个队列中工作(.. 我这么认为?)。有什么简单的方法可以立即清理 ProcesspoolExecutor 的队列吗?

from concurrent.futures import ProcessPoolExecutor
from time import sleep
from random import randint


def something_fancy():
sleep(randint(0, 5))
return 'im back!'


class Work:
def __init__(self):
self.exe = ProcessPoolExecutor(4)

def start_procs(self):
for i in range(300):
t = self.exe.submit(something_fancy)
t.add_done_callback(self.done)

def done(self, f):
print f.result()

def kill(self):
self.exe.shutdown()


if __name__ == '__main__':
work_obj = Work()
work_obj.start_procs()
sleep(5)
work_obj.kill()

所以我想做的是生成一个由 300 个进程组成的队列。 5 秒后它应该会退出。

顺便说一句,因为 gil,我需要使用进程。

最佳答案

使用 shutdown(wait=False) 它将返回得更快。 wait 的默认值为 True 否则它还提供一个 .Cancel(),如果不可取消则返回 False。

link to the docu

它仍然会完成所有处理 future :

If wait is True then this method will not return until all the pending futures are done executing and the resources associated with the executor have been freed.

If wait is False then this method will return immediately and the resources associated with the executor will be freed when all pending futures are done executing. Regardless of the value of wait, the entire Python program will not exit until all pending futures are done executing.

如果你有固定的时间,你应该提供一个超时:

map(func, *iterables, timeout=None, chunksize=1)

可以是float或int,以秒为单位

关于Python Processpoolexecutor - 杀死队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48043555/

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