Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >终止进程会打断python的诅咒。

终止进程会打断python的诅咒。
EN

Stack Overflow用户
提问于 2017-06-21 05:37:50
回答 2查看 1.3K关注 0票数 1

使用python多处理和诅咒,终止进程似乎会干扰诅咒的显示。

例如,在下面的代码中,为什么终止进程停止诅咒显示文本?(按a后按b)

更确切地说,它似乎不仅字符串"hello“不再显示,而且整个诅咒窗口。

代码语言:javascript
运行
AI代码解释
复制
import curses
from multiprocessing import Process
from time import sleep

def display(stdscr):
    stdscr.clear()
    curses.newwin(0,0)
    stdscr.timeout(500)
    p = None
    while True:
        stdscr.addstr(1, 1, "hello")
        stdscr.refresh()
        key = stdscr.getch()
        if key == ord('a') and not p:
            p = Process(target = hang)
            p.start()
        elif key == ord('b') and p:
            p.terminate()

def hang():
    sleep(100)

if __name__ == '__main__':
    curses.wrapper(display)

我在GNU/Linux下运行python3.6。

编辑:

我仍然能够用这个更精简的版本进行复制,这个版本不叫睡眠()。现在只要按下"a“就会触发bug。

代码语言:javascript
运行
AI代码解释
复制
import curses
from multiprocessing import Process

def display(stdscr):
    stdscr.clear()
    curses.newwin(0,0)
    stdscr.timeout(500)
    p = None
    while True:
        stdscr.addstr(1, 1, "hello")
        stdscr.refresh()
        key = stdscr.getch()
        if key == ord('a') and not p:
            p = Process(target = hang)
            p.start()
            p.terminate()

def hang():
    while True:
        temp = 1 + 1

if __name__ == '__main__':
    curses.wrapper(display)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-21 14:11:13

以下代码起作用:

代码语言:javascript
运行
AI代码解释
复制
import curses
from multiprocessing import Process

p = None
def display(stdscr):
    stdscr.clear()
    curses.newwin(0,0)
    stdscr.timeout(500)
    while True:
        stdscr.addstr(1, 1, "hello")
        stdscr.refresh()
        key = stdscr.getch()
        if key == ord('a') and not p:
            p.start()
            p.terminate()

def hang():
    while True:
        temp = 1 + 1

if __name__ == '__main__':
    p = Process(target = hang)
    curses.wrapper(display)

在使用Process初始化UI之前,我创建了一个新的curses.wrapper()。好吧,为什么要这么做?为此,我们必须知道制程是如何工作的,以及当您调用Process(target = hang)时它到底做了什么

分叉 父进程使用os.fork()对Python解释器进行分叉。子进程开始时实际上与父进程相同。父进程的所有资源都由子进程继承。请注意,安全分叉多线程进程是有问题的。 仅在Unix上可用。Unix的默认设置。

现在,它告诉我们什么?当您已经创建了一个Processes屏幕时,您可以在其中创建一个新的cursescurses.wrapper()是做什么的?

在调用func之前,wrapper()打开cbreak模式,关闭echo,启用终端键盘,并在终端有颜色支持时初始化颜色。在出口(通常或例外情况下),它恢复熟模式,打开回声,并禁用终端键盘。

好的,我们有一个新创建的子进程,它和它的父进程拥有完全相同的资源。当您调用terminate()来杀死子程序时,它会释放所有资源,包括诅咒包装器。它恢复以前的终端设置,从而破坏您的UI。

要解决这个问题,您必须以不同的方式实现您的程序。预先创建一个新流程,使用IPC与您的流程进行通信,如果需要多个进程使用过程池,如果您有IO绑定任务,则使用穿线线程池

票数 2
EN

Stack Overflow用户

发布于 2017-06-21 05:59:31

你可能是在Windows上运行这个吗?该平台上的多处理模块的一个文档要求是,所有顶级代码(在您的情况下是curses.wrapper(display) )都必须在if __name__ == '__main__':块中,这样才不会意外地在您生成的进程中执行它。

我认为这里发生的情况是,您生成的进程正在初始化诅咒本身(这涉及适当地设置控制台),然后在控制台终止时恢复到正常状态--从而取消原始程序所做的设置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44677774

复制
相关文章
SpringBoot + QueryDSL 大大简化复杂查询操作
概述 本篇博客主要将介绍的是利用spring query dsl框架实现的服务端查询解析和实现介绍。 查询功能是在各种应用程序里面都有应用,且非常重要的功能。用户直接使用的查询功能往往是在我们做好的UI界面上进行查询,UI会将查询请求发给查询实现的服务器,或者专门负责实现查询的一个组件。市场上有专门做查询的框架,其中比较出名,应用也比较广泛的是elasticsearch。 定义查询请求 对于服务端来说,前端UI发送过来的查询请求必然是按一定规则组织起来的,这样的规则后端必须能够支持和解析。换一种说法就是服
程序猿DD
2022/05/25
1.7K0
SpringBoot + QueryDSL 大大简化复杂查询操作
jQuery将form列表转JSON
一、form表单序列化后的格式 image.png 二、JS 函数 function filedSelectJson(){ var a = {}; var reserveVenueCons = $("#orderForm").serializeArray(); var numreg = /\[[0-9]*\]\./;//正则表达式 var index = 0; var attnum = 5;//list对象中有几个属性,这里有5个:reserveField.id,
week
2018/08/27
3.7K0
jQuery将form列表转JSON
Python将字符串转换为列表
We can convert a string to list in Python using split() function.
全栈程序员站长
2022/09/06
6.2K0
将tensor转换为图像_tensor转int
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
12K0
Java将列表转换为数组,反之亦然
在本文中, 我们将快速学习如何将Java List (例如ArrayList )转换为数组,反之亦然。 如果您希望总体上了解有关ArrayList的更多信息,请随时阅读我们有关Java ArrayLists的文章。
用户7886150
2021/04/28
3.5K0
Python将两个列表转换为字典
最开始,我是想用2层for循环实现,但是发现太麻烦了。最简单的方法,使用zip()函数即可。
py3study
2020/08/26
5.2K0
深入探索Spring Data JPA, 从Repository 到 Specifications 和 Querydsl
数据访问层,所谓的CRUD是后端程序员的必修课程,Spring Data JPA 可以让我们来简化CRUD过程,本文由简入深,从JPA的基本用法,到各种高级用法。
JadePeng
2020/11/13
2K0
springboot2.X 使用spring-data组件对MongoDB做CURD
基于快速开发,需求不稳定的情况, 我决定使用MongoDB作为存储数据库,搭配使用spring-data
suveng
2019/09/17
2.1K0
java map 转string_java-将Map <String,Object>转换为Map <String,String>
Map map = new HashMap(); //Object is containing String
全栈程序员站长
2022/08/25
12.7K0
Spring JPA 拓展
本节记录了一组Spring数据扩展,它们支持在各种上下文中使用Spring数据。目前,大部分集成都是针对Spring MVC的。
Kindear
2020/09/10
1.3K0
Spring JPA 拓展
Python 元组转换为列表
结论:当给定一个可迭代对象(如列表、元组、集合、范围等)时,list() 和 tuple() 返回一个新的列表和元组
Python学习者
2023/07/17
3120
Mybatis-plus 使用 typeHandler 将 String 拼接字符串转换为 List 列表
学生可以有多个角色,但是这多个角色我是作为多条记录存储在另外一张表中的,现在想将这多条记录查询出来,注入到Student对象中的一个List属性中去。
wsuo
2023/01/13
6.5K0
Mybatis-plus 使用 typeHandler 将 String 拼接字符串转换为 List 列表
java将字符串转换为json对象的方法_java jsonobject转string
在与服务器交互的时候,我们往往会使用json字符串,今天的例子是java对象转化为字符串,
全栈程序员站长
2022/11/08
22K0
将字符串转换为date类型_java字符串转date类型
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
14.6K0
58 - 编写一个生产器,将一个二维列表转换为一维列表
编写一个生产器,将一个二维列表转换为一维列表 ''' python生成器(迭代) yield ''' def myGenerator(): numList = [1, 2, 3, 4, 5, 6, 7, 8] for num in numList: yield num for num in myGenerator(): print(num, end=' ') 1 2 3 4 5 6 7 8 ''' [[1,2,3],[2,4,1],[2,4,6]] [1,2,
ruochen
2021/06/08
7920
58 - 编写一个生产器,将一个二维列表转换为一维列表
springJPA 之 QueryDSL(一)
引言 不可否认的是 JPA 使用是非常方便的,极简化的配置,只需要使用注解,无需任何 xml 的配置文件,语义简单易懂,但是,以上的一切都建立在单表查询的前提下的,我们可以使用 JPA 默认提供的方法,简单加轻松的完成 CRUD 操作。 但是如果涉及到多表动态查询, JPA 的功能就显得有些捉襟见肘了,虽然我们可以使用注解 @Query ,在这个注解中写 SQL 或者 HQL 都是在拼接字符串,并且拼接后的字符串可读性非常的差,当然 JPA 还为我们提供了 Specification 来做这件事情,从我个人使用体验上来讲,可读性虽然还不错,但是在初学者上手的时候, Predicate 和 CriteriaBuilder 使用方式估计能劝退不少人,而且如果直接执行 SQL 连表查询,获得是一个 Object[] ,类型是什么?字段名是什么?这些都无法直观的获得,还需我们手动将 Object[] 映射到我们需要的 Model 类里面去,这种使用体验无疑是极其糟糕的。
全栈程序员站长
2022/09/20
5.3K0
将KITTI转换为PASCAL VOC
import os, sysimport globfrom PIL import Image # VEDAI 图像存储位置src_img_dir = "D:\dataset\cityscapes\leftImg8bit\\train\\zurich\\"# VEDAI 图像的 ground truth 的 txt 文件存放位置src_txt_dir = "D:\dataset\cityscapes\gtFine\\train\\zurich\\"src_xml_dir = "D:\dataset\citys
狼啸风云
2020/07/14
7700
Spring Data JPA中使用QueryDSL进行查询
插件的作用是把带有@Entity注解的实体类在指定路径target/generated-sources/java下生成一个衍生的实体类,我们后面就是用这个衍生出来的实体类去构建动态查询的条件进行动态查询。
砒霜拌辣椒
2023/08/23
2.1K0
Spring Data JPA中使用QueryDSL进行查询
聊聊querydsl的生成类
querydsl强大是强大,但是Q类这么一搞,有点搞复杂了,想完全屏蔽sql是不可能的,有一定适用场景,但不是万能。
code4it
2018/09/17
1.5K0
点击加载更多

相似问题

QueryDSL:从谓词(BooleanExpression)对象中提取表名

12

优化Querydsl BooleanExpression查询

11

如何在QueryDSL中为多对多关系创建谓词BooleanExpression

14

QueryDSL中的可重用BooleanExpression

10

如何在QueryDSL BooleanExpression中使用SubQeryExpression

189
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档