【发布时间】:2016-09-03 01:27:24
【问题描述】:
我正在尝试使用多处理库在 Python 2.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
我这样调用函数:
if __name__ == '__main__':
print timeoutFunction('example.txt', 600)
不幸的是,这不起作用,我在 pickle.py 中收到某种 EOF 错误
谁能看出我做错了什么?
提前致谢,
亚历山大
编辑: doSomeWork() 不是一个实际的函数。只是我做的其他工作的填充物。该工作不是并行完成的,也不使用任何共享变量。我只是想运行一个函数并让它可能超时。
【问题讨论】:
-
doSomeWork 是什么?
-
只是一些填充功能。我实际的 solveProblem() 看起来不像那样。只是想简化我的问题,因为函数的内容工作正常。
标签: python timeout multiprocessing eof