栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python实时编码/调试

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python实时编码/调试

您可以通过以下方式自己动手

threading

#!/usr/bin/python3def _spawn_background_interpreter(*args,**kwargs):    from threading import Thread    def _open_interp(locs):        import pre        pre.interact(local=locs)    locs = args[0] if args else None    t = Thread(target=_open_interp, args=(locs,))    t.setDaemon(True) #pre-3.3 API    t.start()

致电

_spawn_background_interpreter(locals())

我还没有测试过,但是如果您的程序不连续地将内容打印到控制台上,这 可能 会很好-否则它将与交互式解释器融合在一起。

“打开新控制台”的想法很有趣,但是非常针对特定环境,因此我不会解决。如果有更好的预包装解决方案,我将很感兴趣。

编辑: 尝试

multiprocessing
解决方案:

def _spawn_background_interpreter(*args,**kwargs):    from multiprocessing import Process    import sys, os    def _open_interp(locs,stdin):        import pre        sys.stdin = os.fdopen(stdin)        pre.interact(local=locs)    locs = args[0] if args else None    fileno = sys.stdin.fileno()    p = Process(target=_open_interp, args=(locs,fileno))    p.daemon = True    p.start()

我最初避免的原因

multiprocessing
是每个新进程都有自己的PID(和stdin)。因此,我不得不将主线程的stdin传递给子进程,然后事情就变得有些棘手了。
请注意 ,在python
3.2及更低版本中存在一个错误,该错误将在您
exit()
multiprocessing
进程中调用的任何时间引起回溯。这在3.3中已修复。

不幸的是,该

multiprocessing
代码仅在符合POSIX的系统上运行-
即不在Windows上运行。并非不可克服,只是需要涉及管道的更复杂的解决方案。

无论如何,

multiprocessing
如果您的主线程中的CPU使用率接近100%,则实现可能会为您带来更好的性能。如果您使用* nix,请尝试一下。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/634320.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号