使用多处理在Python中创建超时函数

2024-09-29 19:27:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在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()不是实际函数。只是我做其他工作的填充物。这项工作不是并行完成的,也不使用任何共享变量。我只是试着运行一个函数,可能会超时。在


Tags: 函数目标returnwindowsdefmanagervalprocess
2条回答

您可以使用Pebble库进行此操作。在

^{1}$

documentation有更完整的示例。在

如果函数超时,库将终止函数,这样您就不必担心IO或CPU被浪费。在

编辑:

如果您正在进行赋值,您仍然可以查看its实现。在

简短的例子:

^{pr2}$

Pebble提供了一个简洁的API,处理转角情况,并使用了更健壮的机制。然而,这或多或少是它在幕后所做的。在

问题似乎是函数求解问题是在我的外部函数中定义的。Python似乎不喜欢这样。一旦我把它移到外面,它工作得很好。在

当我实现pebble解决方案时,我将把noxdafax答案标记为答案。在

谢谢大家!在

相关问题 更多 >

    热门问题