gpt4 book ai didi

python - 重 I/O 和 python 多处理/多线程

转载 作者:太空宇宙 更新时间:2023-11-03 14:31:03 28 4
gpt4 key购买 nike

我正在设计一个小软件,其中包括:

  1. 在互联网上获取资源,

  2. 一些用户交互(资源的快速编辑),

  3. 一些处理。

我想使用许多资源(它们都列在列表中)来这样做。每个都独立于其他。由于编辑部分很累,我想让用户(可能是我)的生活更轻松,这样他就不必等待下载每个资源。为简单起见,我们在这里忘记了第三个任务。

我的想法是使用线程或多处理模块。一些线程(比如线程 1)会提前进行“下载”,而另一个线程(比如线程 2)会在已经下载的资源上与用户交互。

问题:如何确保线程 1 始终至少领先于 ahead_min 资源并且最多领先于 ahead_max(ahead_max>ahead_min)?

我通常需要类似于 Queue.Queue(ahead_max)(或 multiprocessing.Queue(ahead_max))的东西,只是当达到 ahead_max 时,插入会被阻止,直到队列中最多剩下 ahead_min 元素(实际上它阻塞直到队列为空,参见 http://docs.python.org/library/queue.html#module-Queue )。出栈也应该被阻止,直到至少 ahead_min+1 个元素在队列中(在资源序列的末尾我可以插入一些虚拟对象以确保即使是最后一个资源也被处理)。

有什么想法吗?如果您想到任何更简单的替代方案,请分享!

最佳答案

在这种情况下,我建议子类化 Queue 并实现您自己的逻辑。这应该是一项简单的任务,因为 implementation Queue 类的一部分已经在 Python 中。

您可以将其用作模板

from queue import Queue

class MyQueue(Queue):

def put(self, item, block=True, timeout=None):
...

def get(self, block=True, timeout=None):
...

关于python - 重 I/O 和 python 多处理/多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10800078/

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