불꽃을 사용하지 마십시오.하지만 정품입니다. 필자는 매우 오랜 시간 동안 실행되는 멀티 스레드 파이썬 응용 프로그램을 작성하는데, 일반적으로 10 개의 프로세스가 2-3 시간 동안 실행됩니다. 이 기계는 천천히 계산되지 않습니다.메모리, .so 파일 이름 및 16 진수 오프셋을 어떻게 처리합니까?
외부 도구로 인해 응용 프로그램이 약 85-90 % 지연되는 경우가 종종 있습니다.
이 테스트를 더 작은 조각으로 나눠서 성공적으로 실행할 수 있지만 장시간 실행되는 프로그램이 중단됩니다.
예를 들어 100,000,000 개의 항목이있는 목록의 일부 데이터를 분석해야한다고 가정 해 봅시다.
20,000,000 개의 목록으로 나누면 모든 작은 부분이 완료되어 실행됩니다.
100,000,000 개의 프로젝트를 수행하려고하면 끝까지 중단됩니다. 내가 변경할 수없는 몇 가지 외부 도구를 사용하여 지금 진행중인 작업을 확인하려고합니다.
I 설정 Dtrace와 그것이 응답 나는 아래의 코드 샘플과 같은 출력을 얻을 때 내 프로그램의 오른쪽
sudo dtrace -n 'syscall:::entry/execname == "python2.7"/{ @[ustack()] = count() }'
를 실행합니다.
libc.so.7`__sys_recvfrom+0xa
_socket.so`0x804086ecd
_socket.so`0x8040854ac
libpython2.7.so.1`PyEval_EvalFrameEx+0x52d7
libpython2.7.so.1`PyEval_EvalCodeEx+0x665
libpython2.7.so.1`0x800b3317d
libpython2.7.so.1`PyEval_EvalFrameEx+0x4e2f
libpython2.7.so.1`0x800b33250
libpython2.7.so.1`PyEval_EvalFrameEx+0x4e2f
libpython2.7.so.1`PyEval_EvalCodeEx+0x665
libpython2.7.so.1`0x800abb5a1
libpython2.7.so.1`PyObject_Call+0x64
libpython2.7.so.1`0x800aa3855
libpython2.7.so.1`PyObject_Call+0x64
libpython2.7.so.1`PyEval_EvalFrameEx+0x4de2
libpython2.7.so.1`PyEval_EvalCodeEx+0x665
libpython2.7.so.1`0x800abb5a1
libpython2.7.so.1`PyObject_Call+0x64
libpython2.7.so.1`0x800aa3855
libpython2.7.so.1`PyObject_Call+0x64
코드가 반복해서 반복됩니다. Dtrace 파이썬 프로브를 조사해 보았습니다. 그러나 화요일부터 양측이 파손 된 것으로 보입니다. 그래서 이것이 내가 얻을 수있는 가장 가까운 것일 수 있습니다.
내 질문에, 내가 libpython2.7.so.1
가 진수의 기능 pyObject_Call
을 보유하고있는 공유 라이브러리가 0x64
의 오프셋되는 퍼지 생각을 가지고는 그 거 맞아?
어떻게 해독 할 수 있습니까? 나는 이것을 답변 이라든가 가이드로 쓸 수 있도록 무엇을 부를지 모릅니다.
이것은 훌륭한 대답이었으며 문제를 완전히 디버그하는 데 사용할 수있었습니다. 이전에 파이썬 디버거를 사용해 보았지만 스크립트를 실행하지 않았을 가능성이 높습니다. 일부 멀티 프로세싱이 있었기 때문에 스크립트를 실행하지 않았을 것입니다. 프로세스, DTrace를 살펴 보았지만 파이썬 도우미는 모두 구식 인 것처럼 보였습니다. 위의 대답으로 나는 그것을 모두 소트 할 수 있었다. – user1610950