我创建了一个函数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)
('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',)相反,使用强制它为元组(由于尾随逗号).
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |