잠시 후에 일부 프로세스를 종료해야하므로 기다리는 동안 다른 프로세스를 잠자 게했습니다. 그러나 새로운 프로세스는 내가 추측하는 주요 프로세스에서 전역 변수에 액세스 할 수 없습니다. 어떻게 해결할 수 있니?파이썬 - 글로벌 변수를 멀티 프로세싱에 전달하는 방법. 프로세스?
코드 :
import os
from subprocess import Popen, PIPE
import time
import multiprocessing
log_file = open('stdout.log', 'a')
log_file.flush()
err_file = open('stderr.log', 'a')
err_file.flush()
processes = []
def processing():
print "processing"
global processes
global log_file
global err_file
for i in range(0, 5):
p = Popen(['java', '-jar', 'C:\\Users\\two\\Documents\\test.jar'], stdout=log_file, stderr=err_file) # something long running
processes.append(p)
print len(processes) # returns 5
def waiting_service():
name = multiprocessing.current_process().name
print name, 'Starting'
global processes
print len(processes) # returns 0
time.sleep(2)
for i in range(0, 5):
processes[i].terminate()
print name, 'Exiting'
if __name__ == '__main__':
processing()
service = multiprocessing.Process(name='waiting_service', target=waiting_service)
service.start()
귀하의 코드는 내가 말할 수있는 한 원하는대로 수행한다고 생각합니다. 난 분명히 당신이 하위 프로세스로 실행하려고하는 항아리로 그것을 테스트하지 않은,하지만 내가 테스트 해왔 던 사소한 서브 프로세스가 성공적으로 종료 된 것 같습니다. – rchang
그러면 wait_service()에서 인쇄 된 len (프로세스)가 어떻게 0을 인쇄합니까? 이 5 개의 프로세스를 처리 할 때 5를 반환해야합니다. –
테스트했을 때 두 경우 모두 print 문이 5로 나타났습니다. 어떤 방식 으로든 버전이 일치하지 않았습니까? Linux 커널 3.13.0 (민트 배포판)의 Python 2.7.6을 사용하여 테스트했습니다. – rchang