在python中,如果超时,如何跳到下一个输入

在python中,如果超时,如何跳到下一个输入,python,python-2.7,timeout,Python,Python 2.7,Timeout,我有一个输入列表,比如水果=[苹果、香蕉、葡萄、草莓、橘子] 我有一个迭代此列表的for循环和一个处理每个元素的函数: for f in fruits: mix(f) print "Finish mixing f" 我的问题是,如果当前输入占用的时间太长,如何跳到下一个输入。例如,mix()正在与apple合作,但10分钟过去了,它没有进入打印行。如果时间到了,我希望它放弃苹果,转而吃香蕉。我该怎么做呢?概括一下,你想在一段时间内执行一些操作 限制。如果操作在达到时间限制之前完

我有一个输入列表,比如
水果=[苹果、香蕉、葡萄、草莓、橘子]

我有一个迭代此列表的
for
循环和一个处理每个元素的函数:

for f in fruits:
    mix(f)
    print "Finish mixing f"

我的问题是,如果当前输入占用的时间太长,如何跳到下一个输入。例如,mix()正在与apple合作,但10分钟过去了,它没有进入打印行。如果时间到了,我希望它放弃苹果,转而吃香蕉。我该怎么做呢?

概括一下,你想在一段时间内执行一些操作 限制。如果操作在达到时间限制之前完成,则所有 他身体很好。如果没有,则希望中断操作,然后执行 传递给下一个发生的事情

这表明我们要设置一个
try。。。结构除外,带有
经过一定时间后引发的异常

这个问题没有指定平台。我无法提供的代码 窗户。而且似乎对我很有用 那个

在Unix下,我们设置了一个信号处理程序函数,该函数将引发 例外情况;告诉Python在发出
SIGALRM
信号时调用该函数 收到;并设置一个计时器,当它计时时发送该信号 出来请参见下面的示例代码

#!/usr/bin/env python2

import signal
from time import sleep    # only needed for testing

timelimit_seconds = 3    # Must be an integer

# Custom exception for the timeout
class TimeoutException(Exception):
    pass

# Handler function to be called when SIGALRM is received
def sigalrm_handler(signum, frame):
    # We get signal!
    raise TimeoutException()

# Function that takes too long for bananas and oranges
def mix(f):
    if 'n' in f:
        sleep(20)
    else:
        sleep(0.5)

fruits = ['apple', 'banana', 'grape', 'strawberry', 'orange']
for f in fruits:
    # Set up signal handler for SIGALRM, saving previous value
    old_handler = signal.signal(signal.SIGALRM, sigalrm_handler)
    # Start timer
    signal.alarm(timelimit_seconds)
    try:
        mix(f)
        print f, 'was mixed'
    except TimeoutException:
        print f, 'took too long to mix'
    finally:
        # Turn off timer
        signal.alarm(0)
        # Restore handler to previous value
        signal.signal(signal.SIGALRM, old_handler)

我的问题是,如果当前输入占用的时间太长,如何跳到下一个输入。这真的是时间问题吗?或者更确切地说,我指的是一个算法架构问题,这似乎是一个问题。你在
mix
方法中做什么?你标记了python-2.7,但是
print(“Finish mixing f”)
是python 3语法。mix方法中@scharette的可能重复我使用的只有一行代码。我看到了一个类似的答案,但它并不完全正确。我试试你的。谢谢你的帮助。