首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

无法使用Ctrl C命令在Python脚本中终止Greenlet

在Python脚本中,Greenlet是一种轻量级的协程库,它允许在单个线程中运行多个协程。当我们在Greenlet中运行代码时,有时候可能会遇到无法使用Ctrl C命令终止Greenlet的情况。

这个问题的原因是Ctrl C命令在Python中是发送一个SIGINT信号给主线程,而Greenlet并不会响应这个信号。因此,我们需要使用其他方法来终止Greenlet。

一种常见的方法是使用Greenlet的kill()方法来终止它。kill()方法会抛出一个GreenletExit异常,我们可以在协程中捕获这个异常并进行相应的处理。下面是一个示例代码:

代码语言:python
代码运行次数:0
复制
from greenlet import greenlet

def foo():
    while True:
        print("Running foo...")
        greenlet.getcurrent().parent.switch()

def main():
    g = greenlet(foo)
    g.switch()

    # 在主线程中捕获Ctrl C信号
    try:
        while True:
            pass
    except KeyboardInterrupt:
        g.kill()

if __name__ == "__main__":
    main()

在上面的代码中,我们创建了一个名为foo的协程,并在其中使用了一个无限循环来模拟协程的执行。在主线程中,我们使用try-except语句来捕获Ctrl C信号,并在捕获到信号时调用g.kill()方法来终止协程。

除了使用kill()方法外,还可以使用其他方法来终止Greenlet,比如使用throw()方法抛出一个异常,或者使用kill_exception()方法设置一个异常来终止协程。

总结起来,无法使用Ctrl C命令在Python脚本中终止Greenlet的问题可以通过使用Greenlet的kill()方法来解决。在捕获到Ctrl C信号时,调用kill()方法来终止协程的执行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

在python脚本中执行shell命令的方法

在python脚本中执行shell命令的方法 最近在写python的一些脚本,之前使用python都是在django中使用,可能大部分内容都是偏向于后端开发方面的,最近在写一些脚本的时候,发现了...使用Python处理一个shell命令或者一个执行一个shell脚本,一般情况下,有下面三种方法,下面我们来看: 第一种方法是使用os.system的方法 os.system("cmd") 我们在当前目录下面创建一个...aaa.sql的文件,文件中的内容是aaa,然后我们来看测试过程 1[root@ /data ]$python 2Python 2.7.15 (default, Nov 29 2018, 13:37...shell命令打印出来aaa.sql中的内容,然后下面出现的数字0代表上述命令执行成功;如果我们打印bbb.sql则返回值是256,表示执行中出现了问题。...] 7else: 8 result["result"] = false 9 result["message"] = res 10return Response(result) 如果脚本中是对数据库的一系列操作

5.3K00

gevent.hub.BlockingSwitchOutError: Impossible to call blocking function in the event loop callback

最近一个 python 项目中同时用到了 gevent 和 multiprocessing。在优雅退出的实现上,出现了一些预料之外的问题。...gevent 是一个流行的 python 网络库,主要的功能就是在 python 中提供了一些事件循环的接口。它是基于 greenlet 实现的。...greenlet 也可以理解为协程,就像 golang 里的 goroutine。 greenlet 的功能就是提供了在不同调用栈之间切换(switch)的能力。...所以 switch_out 时会找之前在跑的 greenlet(getcurrent()这个代码),结果就是 hub 本身。...一般 switch_out 是用来从一个普通的 greenlet 切换到 hub 里的,现在从 hub 里无法再切换到其它地方了。所以就是‘BlockingSwitchOutError’ 错误了。

1.1K10
  • Python并发编程协程(Coroutine)之Gevent

    hello进程终止后,操作系统恢复shell进程的上下文,并将控制权传回给shell进程 shell进程继续等待下个命令的输入 当我们挂起一个执行流的时,我们要保存的东西: 栈, 其实在你切换前你的局部变量...但是我们无法保证你在复杂的生产环境中有哪些地方使用这些标准库会由于打了补丁而出现奇怪的问题 第三方库支持。...得确保项目中用到其他用到的网络库也必须使用纯Python或者明确说明支持Gevent 既然Gevent用的是Greenlet,我们通过下图来理解greenlet: ?...,可以总结为: python协程的库可以直接monkey path C写成的库可以采用豆瓣开源的greenify来打patch(这个功能自己准备后面做测试) 不过总的来说gevent目前为止还是有很多缺陷...,并且不是官网标准库,而在python3中有一个官网正在做并且在3.6中已经稳定的库asyncio,这也是一个非常具有野心的库,非常建议学习,我也准备后面深入了解

    1.6K100

    Python 远程控制模块 paramiko 问题解决记录

    导语 生产环境中使用paramiko作SSH远程控制时,发现会有部分机器报Error reading SSH protocol banner错误,尝试使用ssh命令连接此机器,只是卡半天,最终还是能够正常登陆...最近一直做运维发布平台,底层命令行、文件通道主要基于paramiko模块,使用过程中遇到各种各样的问题,本文主要用于收集问题及解决记录,以备后续使用。...一、Error reading SSH protocol banner连接错误 这个关键词,在百度、谷歌一搜一大把的提问,也有少部分给出了解决方案,但是最终都无法解决,我经过不断尝试和解读paramiko...二、paramiko远程执行后台脚本“阻塞”问题 我写的远程命令通道上线之后,发现在远程脚本中后台再执行另一个脚本,通道会一直等待后台脚本执行完成才会返回,有时甚至会僵死。...②、发起远程执行 在本地执行 python test.py,会发现整个脚本不会立即打印run ok,而是等30s之后才打印包括test.sh的所有输出信息。

    17.6K20

    docker容器化python服务部署(supervisor-gunicorn-flask)

    ,退出启动容器: Ctrl + d 在交互式容器中退出,但是不退出启动容器:先按 Ctrl + p 后 Ctrl + q 使用 -d 启动容器并一直在后台运行 SSH作为第一进程启动:docker container...作为 python 服务的守护程序,防止容器闪退(一直夯在容器中); 安装命令: yum install -y openssh-server ssh 配置文件 sshd_config 路径: /etc/...> 安装 python 相关库 通过pip3安装,最好加上国内镜像源,防止网络的原因无法下载。...supervisor 提供了统一的方式来控制(start,stop,restart)进程,类似于 systemctl(在 docker 容器中 systemctl 命令是无效的)。...CMD 一般只能运行一条命令,对于多个命令,采用脚本方式运行。

    2.5K20

    推荐一款最强Python自动化神器!不用写一行代码!

    搞过自动化测试的小伙伴,相信都知道,在Web自动化测试中,有一款自动化测试神器工具: selenium。...结合标准的WebDriver API来编写Python自动化脚本,可以实现解放双手,让脚本代替人工在Web浏览器上完成指定的操作。...3.1 录制脚本 我们先查看录制脚本的命令说明 ➜ ~ python3 -m playwright codegen --help Usage: index codegen [options] [url...# 我们通过下面命令打开 Chrome 浏览器开始录制脚本 # 指定生成语言为:Python(默认Python,可选) # 保存的文件名:mikezhou.py(可选) # 浏览器驱动:webkit(默认...' -b chromium https://www.baidu.com 命令行输入后会自动打开浏览器,然后可以看见在浏览器上的一举一动都会被自动翻译成代码,如下所示: 最后,自动化脚本会自动生成,保存到文件中

    1.6K10

    Python远程控制模块paramiko遇到的问题及解决记录

    最近一直在开发自动化运维发布平台,底层命令行、文件通道主要基于 paramiko 模块,使用过程中遇到各种各样的问题,本文主要用于收集问题及解决记录,以备后续使用。...一、Error reading SSH protocol banner 连接错误 这个关键词,在百度、谷歌一搜一大把的提问,也有少部分给出了解决方案,但是最终都无法解决,我经过不断尝试和解读 paramiko...二、paramiko 远程执行后台脚本“阻塞”问题 我写的远程命令通道上线之后,发现在远程脚本中后台再执行另一个脚本,通道会一直等待后台脚本执行完成才会返回,有时甚至会僵死。...②、发起远程执行 在本地执行 python test.py,会发现整个脚本不会立即打印 run ok,而是等 30s 之后才打印包括 test.sh 的所有输出信息。...解决办法: 删除已经安装 greenlet 插件即可,具体原因见后文: rm -r /usr/local/python2.7.5/lib/python2.7/site-packages/greenlet

    7.7K80

    Linux进阶命令-nohup&screen

    ,如果ssh连接中断或者使用ctrl+c就会以业务中断,这样就导致我们的应用的程序无法持续运行,今天我们就来介绍2个命令,均可以达到该目的。...详细示例 1.运行命令并在后台继续运行 nohup python my_script.py & 这个命令会启动 my_script.py 脚本,并且即使你关闭终端或者注销,脚本仍然会在后台继续运行。...2.重定向输出 默认情况下,nohup 会将命令的标准输出(stdout)和标准错误输出(stderr)重定向到当前目录一个名为 nohup.out 的文件中,如果长期使用则需要关注这个文件的大小。...这个命令在最小化系统安装里面没有的,如果需要安装则可以使用下面的命令。...+a+d #这里只是退出会话,里面的执行的业务或者命令还在运行 #你还可以进来 4.永久退出screen会话(不可再进入) Ctrl+d #或者 exit #无法在进入刚才创建的screen 5.进入临时退出的

    10910

    异步IO数据库队列缓存

    Greenlet greenlet是一个用C实现的协程模块,相比与python自带的yield,它可以使你在任意函数之间随意切换,而不需把这个函数先声明为generator # -*- coding:utf...Gevent Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。...在多线程版本中,这3个任务分别在独立的线程中执行。这些线程由操作系统来管理,在多处理器系统上可以并行处理,或者在单处理器系统上交错执行。这使得当某个线程阻塞在某个资源的同时其他线程得以继续执行。...在事件驱动版本的程序中,3个任务交错执行,但仍然在一个单独的线程控制中。当处理I/O或者其他昂贵的操作时,注册一个回调到事件循环中,然后当I/O操作完成时继续执行。回调描述了该如何处理某个事件。...运行客户端脚本将对服务器发起一个TCP连接,回显服务器端的回应然后终止连接并停止reactor事件循环。这里的Factory用来对连接的双方生成protocol对象实例。

    4.3K50

    推荐一款最强 Python 自动化神器!不用写一行代码!

    结合标准的WebDriver API来编写Python自动化脚本,可以实现解放双手,让脚本代替人工在Web浏览器上完成指定的操作。...实操演示 开篇就提到,使用Playwright无需写一行代码,我们只需手动操作浏览器,它会录制我们的操作,然后自动生成代码脚本。...3.1 录制脚本 我们先查看录制脚本的命令说明 ➜ ~ python3 -m playwright codegen --help Usage: index codegen [options] [url...codegen 录制脚本 --help 帮助文档 -o 生成自动化脚本的目录 --target 脚本语言,包含 JS 和 Python,分别对应值为:python 和 javascript -b...# 我们通过下面命令打开 Chrome 浏览器开始录制脚本 # 指定生成语言为:Python(默认Python,可选) # 保存的文件名:mikezhou.py(可选) # 浏览器驱动:webkit(默认

    2K30

    推荐一款最强Python自动化神器!不用写一行代码!

    搞过自动化测试的小伙伴,相信都知道,在Web自动化测试中,有一款自动化测试神器工具:selenium。...结合标准的WebDriver API来编写Python自动化脚本,可以实现解放双手,让脚本代替人工在Web浏览器上完成指定的操作。...3.1 录制脚本 我们先查看录制脚本的命令说明 ➜  ~ python3 -m playwright codegen --help Usage: index codegen [options] [url...# 我们通过下面命令打开 Chrome 浏览器开始录制脚本 # 指定生成语言为:Python(默认Python,可选) # 保存的文件名:mikezhou.py(可选) # 浏览器驱动:webkit(默认...' -b chromium https://www.baidu.com 命令行输入后会自动打开浏览器,然后可以看见在浏览器上的一举一动都会被自动翻译成代码,如下所示: 最后,自动化脚本会自动生成,保存到文件中

    2.2K30

    ​Python协程

    协程是啥 协程是 python 中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源)。 为啥说它是一个执行单元,因为它自带 CPU 上下文。...通俗的理解:在一个线程中的某个函数,可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的,并且切换的次数以及什么时候再切换到原来的函数都由开发者自己确定...协程和线程差异 在实现多任务时,线程切换从系统层面远不止保存和恢复 CPU上下文这么简单。...greenlet模块 为了更好使用协程来完成多任务,python 中的 greenlet 模块对其封装,从而使得切换任务变的更加简单 使用如下命令安装 greenlet 模块: pip install...at 0x252186794c8: fun(5)> 0 Greenlet at 0x252186794c8: fun(5)> 1 Greenlet at 0x252186794c8: fun(5)

    55900

    如何将简单的Shell转换成为完全交互式的TTY

    但凡事总有意外,由于我们获取的shell并不是一个具有完整交互的shell,因此可能会在使用过程中被挂起,甚至还可能会因为我们的操作失误,例如不小心摁下了 “Ctrl-C”键,这将直接终止我们的整个shell...方法1:Python pty模块 对于已经安装了python的系统,我们可以使用python提供的pty模块,只需要一行脚本就可以创建一个原生的终端,命令如下: python -c 'import pty...例如SIGINT(Ctrl-C)仍然会关闭终止Netcat,完成标签或历史记录也依旧没有,但这个方法在实际运用中也有一定的效果。...一旦bash在PTY中运行,我们按Ctrl-Z键将shell调至后台运行 ? 现在我们来检查当前终端和STTY信息,所以我们可以强制连接到shell并匹配: ?...Cheatsheet Cheatsheet命令: 使用Python作为一个伪终端 python -c 'import pty; pty.spawn("/bin/bash")' 使用socat #Listener

    5.4K40

    Python协程

    协程是啥 协程是 python 中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源)。为啥说它是一个执行单元,因为它自带 CPU 上下文。...通俗的理解:在一个线程中的某个函数,可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的,并且切换的次数以及什么时候再切换到原来的函数都由开发者自己确定...协程和线程差异 在实现多任务时,线程切换从系统层面远不止保存和恢复 CPU上下文这么简单。...greenlet模块 为了更好使用协程来完成多任务,python 中的 greenlet 模块对其封装,从而使得切换任务变的更加简单 使用如下命令安装 greenlet 模块: pip install...at 0x252186794c8: fun(5)> 0 Greenlet at 0x252186794c8: fun(5)> 1 Greenlet at 0x252186794c8: fun(5)

    40720

    linux 控制脚本-处理信号~作业控制

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CTRL+C 终止进程组合键 SIGINT CTRL+Z 停止进程组合键 SIGSTP ~~~~~~~~~~~~~~~~...I have ctrl-C this is the end of the test program 每次使用CTRL+C组合键,脚本都会执行trap命令中指定的echo语句,而不是忽略此信号并允许shell...但是如果捕捉被移除前收到信号脚本就会在trap命令中处理它 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...~~~~~~~~~~~~~ 要在命令行界面以后台模式运行shell脚本,只要在命令后加个&就可以,可以在命令行提示符下同时启动任意多个后台作业 [root@aoi ~]# sh i & [1] 1568...最高优先级 19最低优先级 nice命令允许在启动时调整一个命令的调度优先级。

    1.1K20

    《Linux命令行与shell脚本编程大全》第十六章 控制脚本

    1.中断进程 Ctrl+c会生成SIGINT信号。会发送给当前在shell中运行的所有进程。 2.暂停进程 在进程运行时暂停进程,无需终止它。让程序继续保留在内存中,并能从上次停止的位置继续运行。...但是这样可以在不终止进程的情况下能深入脚本内部一窥究竟。 Ctrl+z 会生成一个SIGTSTP信号,停止shell中运行的任何进程。...在trap命令后加上EXIT信号就行了。 按下Ctrl+C 和 自己运行退出都能被捕获到。 例子:   1 #!...16.1.5 修改或移除捕获 在脚本中的不同位置进行不同的捕获处理,需要重新使用带有新选项的trap命令。 修改了信号捕获后,脚本处理信号的方式就会发生变化。 也可以删除以及设置好的捕获。...在终端会话中使用后台进程要注意,ps命令的输出中,每一个后台进程都和终端会话(pts/0)终端联系在一起。如果终端会话退出,那么后台进程也会退出。

    3K61

    python3--协程,greenlet模块,gevent模块

    python之路——协程 引子 之前学习了线程、进程的概念,了解了在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位。按道理来说我们已经算是把cpu的利用率提高很多了。...都无法实现,就用到了gevent模块(select机制)) Greenlet模块 安装方法 windows下 cmd 在命令行执行 pip3 install greenlet greenlet实现状态切换...如此,才能提高效率,这就用到了Gevent模块 Gevent模块 windows下 cmd 在命令行执行 pip3 install gevent Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程...,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。...#  初始化的greenlet列表存放在数组threads中,此数组被传给gevent.joinall 函数, #  后者阻塞当前流程,并执行所有给定的greenlet任务。

    2.8K41

    「干货」基于TMS320C6678开发板,ZYNQ Linux应用案例开发手册分享

    在Ubuntu中执行如下命令使用OpenSSH登陆评估板文件系统,如下图所示。...服务端在收到客户端信息前无法得知客户端的存在,因此需要客户端先向服务端发送信息。在客户端输入字符串"Tronlong",按下回车键即可在服务端显示对应内容。...tl_tcp_client.c注意源码中的struct sockaddr_in、socket、connect、fgets、send、recv等数据结构和系统调用的使用。.../tl_led_flash.py -h执行如下命令运行脚本程序,即可看到评估底板上的LED4进行闪烁。Target# ./tl_led_flash.py可按下"Ctrl+C"终止程序。.../tl_key_test.py -d /dev/input/event0可按下"Ctrl+C"终止程序。关键代码打开按键设备。监听按键事件。

    99120
    领券