最近在将调试器添加到我的python 2.7.10代码时,我得到以下消息:
Traceback (most recent call last):
File "/Users/isaachess/Programming/vivint/Platform/MessageProcessing/vivint_cloud/queues/connectors/amqplib_connector.py", line 191, in acking_callback
callback(message.body)
File "/Users/isaachess/Programming/vivint/Platform/MessageProcessing/vivint_cloud/queues/consumable_message_queue.py", line 32, in deserialized_callback
self._callback_method(msg)
File "/Users/isaachess/Programming/vivint/Platform/BusinessLogic/businesslogic/util/statsd_util.py", line 95, in _time_func
retVal = f(*args, **kwargs)
File "/Users/isaachess/Programming/vivint/Platform/MessageProcessing/vivint_cloud/net/router.py", line 226, in handle
try:
File "/Users/isaachess/Programming/vivint/Platform/MessageProcessing/vivint_cloud/net/router.py", line 226, in handle
try:
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/bdb.py", line 49, in trace_dispatch
return self.dispatch_line(frame)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/bdb.py", line 68, in dispatch_line
if self.quitting: raise BdbQuit
BdbQuit
Run Code Online (Sandbox Code Playgroud)
这是在插入行之后:
import pdb; pdb.set_trace()
在代码中.
我无法弄清楚为什么会这样.我已经阅读了Bdb和Bdbquit,但无法弄清楚为什么会在我的代码中发生这种情况.任何人都可以向我提供一些为什么会发生这种情况的提示吗?我真的想让调试器再次运行.
我用ipdb.set_trace(),每当我需要设置我的代码一个破发点.现在,我正在尝试在我创建的过程中使用它multiprocessing,而代码确实停止,我无法输入任何内容来继续调试.有没有办法让我的stdin指导正常?
理想情况下,我想设想每次分叉进程停止调试时都会打开一个新的控制台,但我不认为这是可能的.
当我要求使用工具来分析Rails应用程序时,有人指着DTrace.由于我在MacOSX工作站上工作并在OpenSolaris上部署,因此这是一种有效的方法.但我对DTrace知之甚少.
除了通常的嫌疑人,Sun DTrace页面和那里的可用信息,还有其他杀手指针可以学习Dtrace吗?
我正在尝试调试一个简单的 python 应用程序,但到目前为止还没有运气。
import multiprocessing
def worker(num):
for a in range(0, 10):
print a
if __name__ == '__main__':
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,))
p.start()
Run Code Online (Sandbox Code Playgroud)
我想在 for 循环中设置一个断点来跟踪 'a' 的值,但我尝试过的工具都无法做到这一点。到目前为止,我尝试使用以下方法进行调试:
我真的很感激任何帮助!
在python 3.4 windows 7上编写和测试的所有代码.
我正在设计一个控制台应用程序,并且需要从命令行(win os)使用stdin来发出命令并更改程序的操作模式.该程序依赖于多处理来处理cpu绑定负载以传播到多个处理器.
我正在使用stdout来监视该状态和一些基本的返回信息和stdin,以根据返回的控制台信息发出命令来加载不同的子进程.
这是我发现问题的地方.我无法让多处理模块接受stdin输入,但是stdout正常工作.我认为在堆栈上找到了以下帮助所以我测试了它并发现使用线程模块这一切都很好用,除了stdout的所有输出都暂停直到每次stdin循环由于GIL锁定与stdin阻塞这一事实.
我会说我已成功完成了使用msvcrt.kbhit()实现的工作.但是,我不禁想知道在多处理功能中是否存在使stdin无法读取任何数据的某种错误.我尝试了很多方法,在使用多处理时没有任何效果.甚至尝试使用队列,但我没有尝试池或多处理的任何其他方法.
我也没有在我的linux机器上尝试这个,因为我专注于尝试让它工作.
这是简化的测试代码,它不能按预期运行(提醒这是用Python 3.4编写的 - win7):
import sys
import time
from multiprocessing import Process
def function1():
while True:
print("Function 1")
time.sleep(1.33)
def function2():
while True:
print("Function 2")
c = sys.stdin.read(1) # Does not appear to be waiting for read before continuing loop.
sys.stdout.write(c) #nothing in 'c'
sys.stdout.write(".") #checking to see if it works at all.
print(str(c)) #trying something else, still nothing in 'c'
time.sleep(1.66)
if __name__ == "__main__":
p1 = …Run Code Online (Sandbox Code Playgroud)