相关疑难解决方法(0)

在pdb中运行Python程序的中断(暂停)?

在gdb中,您可以通过Cc中断(暂停)程序并继续.

你能在pdb中这样做吗?

python debugging pdb

21
推荐指数
2
解决办法
8560
查看次数

检查正在运行的进程正在做什么:打印未经检测的Python程序的堆栈跟踪

有没有办法在Linux上检查正在运行的Python守护进程正在做什么?也就是说,没有检测代码而没有终止它?我希望得到模块的名称和当前正在运行的行号.

常规调试工具(如strace,pstack和gdb)对Python代码不是很有用.大多数堆栈帧只包含来自解释器代码的函数,如PyEval_EvalFrameEx和PyEval_EvalCodeEx,它不会在执行的.py文件中提供任何提示.

python debugging daemon process stack-trace

20
推荐指数
2
解决办法
5970
查看次数

查看正在运行的Python程序的方法

是否有可能在不中断的情况下找到有关正在运行的Python程序正在执行的操作的任何信息?

另外,如果不可能的话,无论如何都要崩溃一个正在运行的Python程序,这样我至少可以获得一个堆栈跟踪(在Ubuntu上使用PyDev)?

我知道我应该使用日志或在调试模式下运行它或插入一个语句来运行调试器...

相关问题

python debugging

15
推荐指数
2
解决办法
4197
查看次数

Python线程挂起

我有一个遵循标准范例的简单线程Python程序:

class SearchThread(threading.Thread):
    def __init__(self, search_queue):
        threading.Thread.__init__(self)
        self.search_queue = search_queue

    def run(self):
        while True:
            try:
                search_url = self.search_queue.get(timeout=15)
                # <do Internet search and print output/>
            except Queue.Empty:
                self.search_queue.task_done()
                break
            except Exception, e:
                print e

if __name__ == '__main__':
    search_queue = Queue.Queue()    
    for i in range(200):
        t = SearchThread(search_queue)
        t.setDaemon(True)
        t.start()
    search_queue.join()
Run Code Online (Sandbox Code Playgroud)

队列中填充了大约1000个URL并且HTTP GET执行简单<do Internet search and print output/>.问题是,在处理了大约500-700个条目(只需几秒钟)之后,程序会一直挂起,没有输出,没有例外,没有任何内容.

我试过requests,urllib2,urllib3,httplib2HTTP GET但没有改变.

你如何调试挂起的线程Python程序?

顺便说一句,我在Ubuntu 11.10(64位)下使用Python 2.7.

编辑

当我盯着挂起过程中的gdb跟踪时,我和以前一样无能为力 …

python multithreading multiprocessing python-multithreading

10
推荐指数
2
解决办法
2万
查看次数

如何强制python的VM打印堆栈跟踪?

我正在处理一个python编写的服务器,它会锁定并停止工作,包括记录.我想知道是否有一个python相当于java的"kill -3"信号,至少打印出当前的堆栈跟踪.

python debugging

8
推荐指数
2
解决办法
3768
查看次数

Python线程转储

有没有办法从正在运行的Python进程中获取线程转储?与Java进程上的kill -3类似.

python

6
推荐指数
1
解决办法
4857
查看次数

从陷入困境的python进程中获取stacktrace

我必须运行一个传统的Zope2网站,并对此有一些不满.最大的问题是,它偶尔会锁定,以100%的CPU负载运行而不再响应请求.虽然这个问题不能定期重现,但是有时会有一个包含3个动态图形的页面触发它,所以我怀疑某种竞争条件会导致无限循环或陷入忙碌状态.

问题是,我还没有找到调试这个东西的方法.Zope日志中没有任何内容,系统日志中没有任何内容.我尝试了这个问题的建议来获得一个堆栈跟踪,但唯一有效的信号是SIGKILL.

是否还有另一种可能性来确定卡住的过程究竟在哪里?

python debugging zope infinite-loop

6
推荐指数
2
解决办法
6139
查看次数

Linux上的多处理进程终止失败

我刚刚注意到multiprocessingLinux上进程终止(来自库)方法的问题.我有应用程序使用multiprocessing库,但...当我terminate在Windows上调用函数一切都很好,另一方面Linux失败了这个解决方案.作为过程杀戮的替代,我被迫使用

os.system('kill -9 {}'.format(pid))
Run Code Online (Sandbox Code Playgroud)

我知道这不是太聪明,但它确实有效.所以我只是想知道为什么这段代码在Windows上运行,但在Linux上运行失败.

例:

from multiprocessing import Process
import os

process=Process(target=foo,args=('bar',))
pid=process.pid
process.terminate() # works on Windows only

...

os.sytem('kill -9 {}'.format(pid)) # my replacements on Linux
Run Code Online (Sandbox Code Playgroud)

我的配置:python 3.2.0 build 88445; Linux的2.6.32-Debian的6.0.4

这是我的代码中的示例.我希望这就足够了.

def start_test(timestamp,current_test_suite,user_ip):
    global_test_table[timestamp] = current_test_suite
    setattr(global_test_table[timestamp], "user_ip", user_ip)
    test_cases = global_test_table[timestamp].test_cases_table

    test_cases = test_cases*int(global_test_table[timestamp].count + 1)
    global_test_table[timestamp].test_cases_table = test_cases
    print(test_cases)
    print(global_test_table[timestamp].test_cases_table)

    case_num = len(test_cases)
    Report.basecounter = Report.casecounter = case_num

    setattr(global_test_table[timestamp], "case_num", case_num)
    setattr(global_test_table[timestamp], "user_current_test", 0)

    try:
        dbobj=MySQLdb.connect(*dbconnector)
        dbcursor=dbobj.cursor()

        dbcursor.execute(sqlquery_insert_progress.format(progress_timestamp …
Run Code Online (Sandbox Code Playgroud)

python linux multiprocessing python-3.x

6
推荐指数
1
解决办法
2902
查看次数

Python相当于Jstack?

有没有相当于jstack的python?我有一个挂起的过程,我真的想看看它是什么,因为我还没有重现开发中的缺陷.

python

5
推荐指数
1
解决办法
1989
查看次数

python 进程的内存使用量逐日增加

设想:

我有一个连续运行的 python 进程(直到我们手动停止 - 无限地)并通过每 1 分钟读取某些系统文件来收集数据。当它启动时,它占用大约25 MB。但占用的内存量一天天增加,15天后就超过了500MB。

  • 我是一个Python新手,所以无法通过手动/使用调试器检查代码来找出问题,
  • 我不知道有什么工具可以轻松发现问题,请建议一些可以帮助我发现问题的工具或方法。
  • 我认为这可能是内存泄漏问题或变量一次又一次地向其附加数据,并且根本没有释放它......请向我指出某些参考文献,它们可以帮助我理解 python 中的此类问题。

希望细节足够清楚,更多细节请告诉我,我可以澄清。

更新

我试图按照这个线程显示正在运行的Python应用程序的堆栈跟踪,但我面临以下无法完全解决的错误。

  • 当前上下文中没有符号“PyEval_EvalFrameEx”。
  • 当前上下文中没有符号“PyStringObject”。

我搜索找到了这样的方法,可以挂钩已经运行的进程并获取堆栈/内存信息。但还没有运气,请帮助我。

python memory performance memory-leaks

5
推荐指数
1
解决办法
1932
查看次数

当枪杀工人超时时,是否有可能获得堆栈跟踪?

具体来说,我正在用Flanicorn中的默认工作人员运行Flask应用程序。我试图弄清楚如何调试/跟踪在处理请求时由于超时导致工作人员死亡的情况。有没有一种方法可以获取堆栈跟踪或配置文件以调试此请求?

timeout flask gunicorn

5
推荐指数
2
解决办法
213
查看次数