저와 함께 Google에 그것에 대한 답변이있는 것 같지만 단순히 얻을 수 없습니다.
Django Celery 환경에서 두 개의 포크 후에 실행하고 있습니다. 나는 이것들이 무언가를 바꿀 수 있었는지 모르겠지만 그들은 그렇지 않다고 생각합니다.
강력한 것으로 남겨 둘 코드가 많지 않습니다.
if __name__ == '__main__':
os.setsid()
나에게 허용되지 않는 아름다운 작업을 부여합니다
최신 안정적인 Django, Debian, Celery 및 Python 버전을 실행하고 있습니다.
파이썬은 os.setsid()
아마도 기본 라이브러리 호출을 호출 setsid(3)
합니다.
의 전체 ERRORS 섹션 man 3 setsid
은 다음과 같습니다.
ERRORS
EPERM The process group ID of any process equals the PID of the call-
ing process. Thus, in particular, setsid() fails if the calling
process is already a process group leader.
IOW : setsid()
실패 의 유일한 원인 은 호출 프로세스가 이미 프로세스 그룹 리더 인 경우입니다. Ergo : 실패를 무시할 수 있습니다. 이것이 사실인지 확인하려면 반환 된 항목 getpid()
과 실패한 getpgid()
시기를 비교하십시오 os.setsid()
.
#!/usr/bin/env python
import os
import errno
if __name__ == '__main__':
try:
os.setsid()
except OSError, (err_no, err_message):
print "os.setsid failed: errno=%d: %s" % (err_no, err_message)
print "pid=%d pgid=%d" % (os.getpid(), os.getpgid(0))
위를 실행하면 다음을 얻습니다.
os.setsid failed: errno=1: Operation not permitted
pid=17025 pgid=17025
process-id (pid)는 process-group-id (pgid)와 동일합니다. 이는이 프로세스가 실제로 이미 프로세스 그룹 리더임을 의미합니다.
추신 : 예, 간단한 오류 반환 코드로 성공과 실패를 구분하는 데 충분한 예외를 발생시키는 것은 파이썬의 당혹스러운 기능입니다 (익숙한 Un * x libc
API가 동작 하는 것처럼 ). 이것은 불행히도 파이썬 시스템 호출 인터페이스가 구현되는 방법이므로 try: except ...:
파이썬이 코드를 중단하지 못하도록 많은 시스템 호출을 구문으로 래핑 해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다