2016-09-06 3 views
1

먼저 내 현재 목표에 대한 간략한 개요 :파이썬 프로세스를 다른 파이썬 파일로 제어

매주 간단한 파이썬 프로그램을 실행하기 위해 스케줄러를 사용하고 싶습니다. 이 프로그램은 일부 데이터를 읽고 결과를 데이터베이스에 입력합니다. 예약 된 작업은 나무 딸기 파이에 며칠 동안 작동하므로 프로세스는 백그라운드에서 시작해야합니다. 따라서 백그라운드 작업에서 현재 상태를 시작, 중지 및 가져올 수있는 파이썬 파일을 만들고 싶습니다. 또한 백그라운드 작업을 중단하지 않고 제어 파일을 종료했다가 다시 입력 할 수 있어야합니다.

현재 나는 매초마다 파이썬 파일을 실행하기 위해 apscheduler를 시도했다. 실제 문제는 다른 외부 파일에서 상태를 제어하기 위해 현재 파이썬 파일에 액세스 할 수 없다는 것입니다. 전반적으로 나는 어떻게하면 외부 파일을 서브 프로세스 폼을 제어 할 수 있는지 그리고 제어 파이썬 파일을 다시 시작한 후에 동일한 서브 프로세스를 다시 찾을 수있는 실제 솔루션을 찾지 못했습니다.

편집 :

그래서 전반적인까지 내가 그것을 가지고가 지금은 자신의 PID와 현재의 프로세스를 찾을 수 있어요. 전송할 수있는 인스턴트 메시지를 사용하면 현재 프로세스에 종료 신호를 보낼 수 있습니다. 내 예약 된 파일 안에는 catch these signals 수 있으며 정상적인 방법으로 프로그램을 종료 할 수 있어요.

답변

1

백그라운드 프로세스를 제어 (시작, 다시 시작, 중지, 예약)하려면 subprocess을 사용하십시오. 다음은 타임 아웃이있는 서브 프로세스 'popen의 example입니다.

schedulerbackground job간에 일부 데이터를 전달하려면 IPC 메커니즘 (예 : 소켓) 중 하나를 사용하십시오.

+0

프로세스 제어 가능 하위 프로세스를 사용할 수 있지만 컨트롤러 (주 프로세스)를 다시 시작한 후 실행중인 하위 프로세스를 다시 찾는 방법은 무엇입니까? –

+0

아니요, 파이썬의 하위 프로세스를 사용하여 만든 하위 프로세스는 정상적으로 제어 프로그램이 종료 된 후에 종료됩니다. – AbdealiJK

+0

@VeitBjarsch 당신은'ps'와 같은 리눅스 도구를 사용할 수 있습니다. [example] (http://stackoverflow.com/questions/2940858/kill-process-by-name). –