Python 比较在时间段后终止运行函数的方法

Python 比较在时间段后终止运行函数的方法,python,python-2.7,time,multiprocessing,Python,Python 2.7,Time,Multiprocessing,我有一个程序,可以打开很多URL并下载图片。 我有一个程序的功能,它管理链接的打开和图片下载,它包含一个for循环,并对优先级队列执行一些操作。我想运行此函数,但不能超过设置的时间段。例如,如果此函数运行时间超过1小时,我希望终止它并运行程序的其余部分(其他函数)。 我试图找到一些解决方案,我在堆栈上发现了两个问题。 第一种解决方案仅使用时间模块 第二种方法还使用多处理模块 . 有人能建议哪一个更适合在我的程序中使用吗?我将为我的函数编写一个伪代码: def fun(): for link i

我有一个程序,可以打开很多URL并下载图片。 我有一个程序的功能,它管理链接的打开和图片下载,它包含一个
for循环
,并对优先级队列执行一些操作。我想运行此函数,但不能超过设置的时间段。例如,如果此函数运行时间超过1小时,我希望终止它并运行程序的其余部分(其他函数)。 我试图找到一些解决方案,我在堆栈上发现了两个问题。 第一种解决方案仅使用
时间
模块

第二种方法还使用
多处理
模块 . 有人能建议哪一个更适合在我的程序中使用吗?我将为我的函数编写一个伪代码:

def fun():
 for link in linkList:
   if link not in queue:
     queue.push(link)
   else:
     queue.updatePriority(link)
 if queue:
   top = queue.pop()
   fun(top)
此函数在其他函数中调用: def运行(墨水): 乐趣(惊喜)

在其他模块中调用run()函数。 对于包含大量模块并执行大量任务的程序,哪种方法更好?该模块非常适合此任务


您可以创建一个未来,然后使用支持超时参数的
asyncio.wait

在这里使用
multiprocessing
会有点棘手,因为
fun
正在消耗一个来自程序其他部分的优先级队列(我假设是)。
队列
无法在进程之间轻松传递-您需要创建一个自定义队列,用它注册
队列.PriorityQueue
类,然后启动
管理器
服务器,在服务器上实例化一个
PriorityQueue
,并在与队列交互的任何地方使用
代理
。这是一个很大的开销,也有点影响性能


因为看起来您实际上并不需要任何并发性—您希望程序的其余部分在运行
fun
时停止—我认为没有充分的理由使用
多处理。相反,我认为使用基于时间的解决方案更有意义。

@但我想使用内置模块异步IO模块是内置的。OP使用的是2.7-请参阅标签。