我尝试在python2.7.11(在Windows上)中使用多处理库创建一个超时函数。在
我的基本目标是在函数超时时返回一个值,如果不超时则返回实际值。在
我的方法如下:
from multiprocessing import Process, Manager
def timeoutFunction(puzzleFileName, timeLimit):
manager = Manager()
returnVal = manager.list()
# Create worker function
def solveProblem(return_val):
return_val[:] = doSomeWork(puzzleFileName) # doSomeWork() returns list
p = Process(target=solveProblem, args=[returnVal])
p.start()
p.join(timeLimit)
if p.is_alive():
p.terminate()
returnVal = ['Timeout']
return returnVal
我把这个函数叫做:
^{pr2}$不幸的是,这不起作用,我在泡菜.py在
谁能看出我做错了什么吗?在
提前感谢,
亚历山大
编辑:doSomeWork()不是实际函数。只是我做其他工作的填充物。这项工作不是并行完成的,也不使用任何共享变量。我只是试着运行一个函数,可能会超时。在
您可以使用Pebble库进行此操作。在
^{1}$documentation有更完整的示例。在
如果函数超时,库将终止函数,这样您就不必担心IO或CPU被浪费。在
编辑:
如果您正在进行赋值,您仍然可以查看its实现。在
简短的例子:
^{pr2}$Pebble提供了一个简洁的API,处理转角情况,并使用了更健壮的机制。然而,这或多或少是它在幕后所做的。在
问题似乎是函数求解问题是在我的外部函数中定义的。Python似乎不喜欢这样。一旦我把它移到外面,它工作得很好。在
当我实现pebble解决方案时,我将把noxdafax答案标记为答案。在
谢谢大家!在
相关问题 更多 >
编程相关推荐