Python中的多线程队列

2 投票
6 回答
1823 浏览
提问于 2025-04-15 15:37

我需要在一个网页应用中执行一些耗时的任务。因为这些任务可能会运行几分钟,所以它们必须在多个线程上运行,这样用户就不用一直盯着加载页面等好几分钟。

所以我觉得使用一个多线程的队列会是个不错的解决方案。你放入队列的每个对象实例都应该在自己的线程上运行。

我对如何开始有个基本的想法,但我敢打赌,已经有很多更好的解决方案存在,或者在你们的脑海里;)

这是我想的队列应该是什么样子的:

[
 [
  obj_instance_1,[
                  (function_1, function_args_1, priority_1),
                  (function_2, function_args_2, priority_2),
                 ]
 ],
 [
  obj_instance_2,[
                  (function_n, function_args_n, priority_n),
                 ]
 ]
]

其中 [] 是列表,() 是元组。

6 个回答

2

kamaelia 提供了一些工具,可以帮助我们更简单地处理同时进行的任务,比如线程或进程等。

2

你只需要让你的元素继承自 threading.Thread,并使用 Conditions() 来实现 生产者-消费者 系统。

我会维护一个线程池,里面有自己的并发控制和一个 add() 方法,这样其他代码就可以把线程添加到这个池子里。

这是 Python 线程的文档,基本上和其他线程实现的规则差不多……没有什么可怕的。

6

Python的标准库里面有一个叫做Queue的模块,它本身就很安全,适合多线程使用,应该能满足你的需求。

这里有一篇不错的文章任务队列实现模式,讨论了如何使用Queue来处理任务队列。

撰写回答