快乐学习
前程无忧、中华英才非你莫属!

Python 异步编程-Gevent-3

gevent执行状态判断

import gevent

def win():
    return 'You win!'

def fail():
    raise Exception('You fail at failing.')

# winner = gevent.spawn(win)
loser = gevent.spawn(fail)

print(winner.started) # True
print(loser.started)  # True

# 在 Greenlet 中引发的异常,留在 Greenlet 内。
try:
    gevent.joinall([winner, loser])
except Exception as e:
    print('This will never be reached')

print(winner.value) # 'You win!'
print(loser.value)  # None

print(winner.ready()) # True
print(loser.ready())  # True

print(winner.successful()) # True
print(loser.successful())  # False

# 在失败中引发的异常,不会传播到外面
# greenlet. 堆栈跟踪将打印到标准输出,但它
# 不会展开父级的堆栈。

print(loser.exception)

# 虽然有可能在外面再次引发异常
# raise loser.exception
# or with
# loser.get()

True
True
You win!
None
True
True
True
False
You fail at failing.

杀死僵尸进程

当主程序收到 SIGQUIT 时未能让步的 Greenlet 可能使程序的执行时间比预期的要长。这会导致所谓的“僵尸进程”,需要从 Python 解释器外部杀死它们。

一个常见的模式是在主程序上监听 SIGQUIT 事件并gevent.shutdown在退出前调用。

import gevent
import signal

def run_forever():
    gevent.sleep(1000)

if __name__ == '__main__':
    gevent.signal(signal.SIGQUIT, gevent.kill)
    thread = gevent.spawn(run_forever)
    thread.join()
打赏

未经允许不得转载:同乐学堂 » Python 异步编程-Gevent-3

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

特别的技术,给特别的你!

联系QQ:1071235258QQ群:367203382
error: Sorry,暂时内容不可复制!