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

发布于 2022-09-06 15:27:34 字数 1256 浏览 47 评论 0

请教一个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同时并发执行。请问这个为任务计时、限时,并且在时限内让任务并发执行的程序应该怎么设计呢?

谢谢了先!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文