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