python如何设置超时重新运行?

Python012

python如何设置超时重新运行?,第1张

python通过subprocess模块调用系统命令。实际使用中,有一次是命令进入了交互模式,结果web端直接卡死了。

调用时设置一个超时时间,时间用完后自动断开。

这样就避免了系统因为调用命令而僵死的问题。

python多线程延迟并发的解决方法如下:

1.python之中多线程的特点,实际上是将执行耗时长的任务放在前台,耗时短的任务放在后台,当处理器有空闲时或者是后台任务主动调用时就会将其拿到前台来执行,而在这个过程之中实际上每次还是执行的一个线程。

2.python多线程延迟并发指的则是当前python程序内有多个程序,也就是任务同时处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

3.python多线程延迟并发的好处就在于可以更加合理的去调配资源,因为多线程是使用CPU的多核处理器去完成任务的。而并发则是在同一处理器上完成任务,多线程实现并发的话就可以提高运行速度并且减少内存占用。

碰到这种需求时不要惊慌,可以使用wait()里的timeout参数来设置等待时间,也就是从这个函数开始运行算起,如果时间到达协程没有执行完成,就可以不再等它们了,直接从wait()函数里返回,返回之后就可以判断那些没有执行成功的,可以把这些协程取消掉。例子如下

import asyncio

async def phase(i):

    print('in phase {}'.format(i))

    try:

        await asyncio.sleep(0.1 * i)

    except asyncio.CancelledError:

        print('phase {} canceled'.format(i))

        raise

    else:

        print('done with phase {}'.format(i))

        return 'phase {} result'.format(i)

async def main(num_phases):

    print('starting main')

    phases = [

        phase(i)

        for i in range(num_phases)

    ]

    print('waiting 0.1 for phases to complete')

    completed, pending = await asyncio.wait(phases, timeout=0.1)

    print('{} completed and {} pending'.format(

        len(completed), len(pending),

    ))

    # Cancel remaining tasks so they do not generate errors

    # as we exit without finishing them.

    if pending:

        print('canceling tasks')

        for t in pending:

            t.cancel()

    print('exiting main')

event_loop = asyncio.get_event_loop()

try:

    event_loop.run_until_complete(main(3))

finally:

    event_loop.close()

结果输出如下:

starting main

waiting 0.1 for phases to complete

in phase 0

in phase 2

in phase 1

done with phase 0

1 completed and 2 pending

canceling tasks

exiting main

phase 1 canceled

phase 2 canceled