为什么发送这么多变量?

Mis*_*ahX 1 python

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

无论如何,我的timeout_func受到了我在这里收到的帮助的启发: 在Windows中经过一段时间后杀死一个函数

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

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

def do_this(bob, jim):
return bob, jim
Run Code Online (Sandbox Code Playgroud)

它工作得很好......

这里发生了什么?它不喜欢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')
Run Code Online (Sandbox Code Playgroud)

Amb*_*ber 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')
Run Code Online (Sandbox Code Playgroud)

('i was returned',)相反,使用强制它为元组(由于尾随逗号).