在我的 Python 3 应用程序中,我必须处理许多不应阻塞主线程的小型(同时)I/O 任务,因此我想使用线程池:
from concurrent.futures import ThreadPoolExecutor
class MyApp:
def __init__(self):
self.app_thread_pool = ThreadPoolExecutor()
def submit_task(self, task):
self.app_thread_pool.submit(MyApp.task_runner, task)
@staticmethod
def task_runner(task):
# Do some stuff with the task, save to disk, etc.
这工作正常,作业正在线程池的线程中提交和启动,任务执行它们应该执行的操作。现在,阅读关于模块的文档concurrent.futures,似乎这个模块/线程池将与Future对象一起使用,以处理提交任务的结果。然而,就我而言,我对这些结果不感兴趣,我想解雇并忘记我的任务,他们能够自己处理。
所以我的问题是:我是否必须使用期货,或者我可以只是submit()一个任务,如上所示,而忽略Future从作业提交返回的任何对象?我问的是内存和资源管理。请注意,我也不想使用with文档中描述的语句使用线程池,因为我在应用程序的整个生命周期中都需要这个线程池,并且启动线程池的主线程还有很多其他事情要做...