为什么发送这么多变量?

时间:2011-05-21 03:25:50

标签: python

我创建了一个函数timeout_func正常运行另一个函数并返回其输出,但如果函数超过'secs',它将返回一个字符串'failed'。 基本上,它是一种解决方法来超时可以无限运行的函数。 (Windows上的python 2.7)(为什么我需要一个解决方法,为什么我不能让这个函数非无限?因为有时你不能这样做,它在已知中称为错误过程即:fd = os.open('/dev/ttyS0', os.O_RDWR)

无论如何,我的timeout_func受到了我在这里收到的帮助的启发: kill a function after a certain time in windows

我的代码存在的问题是,do_this函数由于某种原因正在接收14个变量而不是1个变量。通过双击脚本或从python.exe运行它时,我得到错误消息。从IDLE你没有异常错误.... exception error message

但是,如果我将其更改为:

def do_this(bob, jim):
return bob, jim

它运作得很好......

这里发生了什么?它不喜欢1变量函数......?

import multiprocessing
import Queue


def wrapper(queue, func, func_args_tuple):
    result = func(*func_args_tuple)
    queue.put(result)
    queue.close()

def timeout_func(secs, func, func_args_tuple):
    queue = multiprocessing.Queue(1) # Maximum size is 1
    proc = multiprocessing.Process( target=wrapper, args=(queue, func, func_args_tuple) )
    proc.start()

    # Wait for TIMEOUT seconds
    try:
        result = queue.get(True, secs)
    except Queue.Empty:
        # Deal with lack of data somehow
        result = 'FAILED'
        print func_args_tuple
    finally:
        proc.terminate()

    return result


def do_this(bob):
    return bob

if __name__ == "__main__":
    print timeout_func( 10, do_this, ('i was returned') )
    x = raw_input('done')

1 个答案:

答案 0 :(得分:5)

('i was returned')不是元组。它计算为一个字符串,就像(3+2)计算为整数..

调用do_this(*('i was returned'))将序列'i was returned'的每个字母作为单独的参数传递 - 相当于:

do_this('i', ' ', 'w', 'a', 's', ' ', 'r', 'e', 't', 'u', 'r', 'n', 'e', 'd')

使用('i was returned',)强制它成为一个元组(由于尾随逗号)。