请问:Python的multi-processing模块为任务计时、限时?

请教一个Python的multi-processing模块为任务计时、限时的问题。现在我有2个任务,f1和f2,要么1比2快、要么2比1快。现在要并发同时执行2个任务,快的完毕之后等待慢的。等待2个任务都结束之后,然后系统再转而运行第3个任务。

我尝试了一下apply_async和ApplyResult.wait:

import multiprocessing

def f1(input1):
    print "This starts task1."
    time.sleep(1)
    print "This ends task1."
def f2(input1):
    print "This starts task2."
    time.sleep(2)
    print "This ends task2."

def multiprocessor_hack(instance, name, args=(), kwargs=None):
      if kwargs is None:
            kwargs = {}
      return getattr(instance, name)(*args, **kwargs)

def main()
      pool = multiprocessing.Pool(processes = 2)
      results = [pool.apply_async(multiprocessor_hack, args = (self, 'f1', (input1,))), pool.apply_async(multiprocessor_hack,args = (self, 'f2', (input1,)))]
      pool.close()
      map (multiprocessing.pool.ApplyResult.wait, results)
      responses = [r.get() for r in results]

这样基本就没问题了。如果谁知道更好的办法来实现async并发运行f1和f2,欢迎指教。另外,平台是Python2.7,所以高级一点的Asyncio就没法用了。

现在我的问题是如何为f1和f2这2个任务计时。假设时限是5秒钟,5秒之后不论f1和f2是否完成,都要强行终止,然后系统再转而运行第3个任务。当然,如果f1和f2都在5秒之内完成,那么还是按上面并发执行的设计,快的等慢的。

我试着写一个sleep(5)的f3,但是显然不能把f1、f2、f3同时并发执行。请问这个为任务计时、限时,并且在时限内让任务并发执行的程序应该怎么设计呢?

谢谢了先!

阅读 2.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题