multiprocessing
모듈에 익숙해 지려고합니다. 현재 Pipe()
과 관련된 문제가 있습니다. 나는 내 문제를 설명하기 위해 작은 예를 고안했다. 다른 폴더 (cleaner
) 멀티 프로세싱 파이프()가 작동하지 않습니다.
이 파일 복사를 감지
- 특정 폴더 (
spawner
) - 에 파일을 생성 한 그리고 또 다른 : 나는 두 가지 기능을 썼다 둘 다 잘 작동합니다. 나는 또한 파일의 생성과 복사가 동시에 일어날 수 있도록하기 위해
Process
을 생성했다.다음 단계에서는
spawner
이cleaner
과 통신하여 파일 작성을 완료 했으므로 파일을 끝낼 수 있습니다.import os from time import sleep import multiprocessing as mp from shutil import copy2 def spawner(f_folder, pipeEnd): template = 'my_file{}.txt' for i in range(10): new_file = os.path.join(f_folder, template.format(str(i))) with open(new_file, 'w'): pass sleep(1) pipeEnd.send(True) return def cleaner(f_folder, t_folder, pipeEnd): state = set() while not pipeEnd.recv(): new_files = set(os.listdir(f_folder)).difference(state) state = set(os.listdir(f_folder)) for file in new_files: copy2(os.path.join(f_folder, file), t_folder) sleep(3) return if __name__ == '__main__': receiver, sender = mp.Pipe() from_folder = r'C:\Users\evkouni\Desktop\TEMP\PythonTests\subProcess\from' to_folder = r'C:\Users\evkouni\Desktop\TEMP\PythonTests\subProcess\to' p = mp.Process(target=spawner, args=(from_folder, sender)) q = mp.Process(target=cleaner, args=(from_folder, to_folder, receiver)) p.start() q.start()
난 그냥이 일을 얻을 수있을 수없는 것 .. 어떤 도움을 주시면 감사하겠습니다 : 여기
는 코드입니다.
감사합니다. 그것은 다소 효과가있었습니다. 'Pipe()'솔루션을 올리시겠습니까? 제가 파일 이름을 전달하기를 원한다고 가정하십시오. –
이 경우 spawner에'pipeEnd.send (new_file)'을 사용하게 될 것입니다 (끝나면'None' 또는'False'를 보낼 것입니다). cleaner에서는'filename = pipeEnd.recv()'를 사용하고 새로운 이름을 생성하기위한 간단한 텍스트 처리 (dest dir에서)와'copy2 (filename, dest_filename)' – lxop
을 얻습니다. 나는'queue' ('spawner'를 사용하여 큐에 파일을 넣고'queue '가 비워 질 때까지'cleaner'를 사용하여'get'ting)로 끝내려고했습니다. 정말 고마워요! –