请问: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同时并发执行。请问这个为任务计时、限时,并且在时限内让任务并发执行的程序应该怎么设计呢?
谢谢了先!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论