현재 많은 프로세스를 실행해야하는 파이썬에서 시뮬레이션 프로그램을 실행 중입니다. 이러한 각 프로세스에는 특정 코드 블록을 실행하는 루프가 있습니다.파이썬 다중 처리 프로그램에서 루프를 켜고 끄기
내가 직면 한 문제는 알 수없는 시간 동안 실행해야한다는 것입니다 (실험이 완료 될 때까지). 이 시간의 가치를 미리 알 수있는 방법이 없습니다.
나는 프로세스를 종료하는 방법을 찾고 있거나 실험이 끝나면 프로세스가 실행을 멈추게 할 수 있습니다.
현재 저는 Python의 다중 처리 모듈에서 Manager를 사용하여 플래그 변수를 만들었습니다. 각 자식 프로세스는이 플래그가 true로 설정된 동안에 만 실행되는 루프를 포함합니다. 이렇게하면 문제가 해결되지만 토글 플래그가 false로 설정된 경우 각 프로세스마다 많은 오류가 발생합니다. 내가 여기에 갈 것을 시도하고 무엇을 할 수있는 적절한 방법이 있는지
Traceback (most recent call last):
File "C:\Python33\lib\multiprocessing\process.py", line 258, in _bootstrap
self.run()
File "C:\Python33\lib\multiprocessing\process.py", line 95, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\Michael\PycharmProjects\untitled1\pmonitor.py", line 33, in backgroundTaskLauncher
while flag[0]:
File "<string>", line 2, in __getitem__
File "C:\Python33\lib\multiprocessing\managers.py", line 726, in _callmethod
conn.send((self._id, methodname, args, kwds))
File "C:\Python33\lib\multiprocessing\connection.py", line 207, in send
self._send_bytes(buf.getbuffer())
File "C:\Python33\lib\multiprocessing\connection.py", line 281, in _send_bytes
ov, err = _winapi.WriteFile(self._handle, buf, overlapped=True)
BrokenPipeError: [WinError 232] The pipe is being closed
Process Process-20:
이 궁금입니다. 올바른 용어를 사용하고 있는지 확실하지 않습니다.
다음과 같이 주요 공정의 코드는 다음과 같습니다
if __name__ == '__main__':
manager = Manager()
flag = manager.list([True])
for taskSize in taskSizes:
flag[0] = True
for i in range(1,TASK_LAUNCHERS):
Process(target=backgroundTaskLauncher, args=(taskSize,flag)).start()
#Experiment goes here
flag[0] = False
발사 과정에서의 코드는 다음과 같습니다
def backgroundTaskLauncher(taskSize,flag):
while flag[0]:
for i in range(0,CHUNK_AMOUNT):
Thread(target=task, args=(taskSize,)).start()
sleep(MICROCHUNK_GAP)
sleep(INTERCHUNK_GAP*random.random()*2)
는 본질적으로 주요 방법은 backgroundTaskLauncher 프로세스의 번호로 전화를 누가 차례 , 토글 플래그가 사용 가능한 동안 많은 스레드를 시작하고 플래그가 사용 불가능할 때 중지 및 완료하십시오.
이 문제를 해결하는 적절한 방법을 찾고 있습니다.
내가 _some_ 코드를 업로드 제안이 시도 그래서 자식 프로세스는 자신의 아빠 ;-)
않고 남아 있습니다. – Josh
우리가 볼 수없는 코드에서 문제를 디버깅 해달라고 요청하고 있습니다. 그것은하기가 매우 어렵습니다. – abarnert
죄송합니다. 코드를 추가했습니다. – user2059807