내 앱에서 새 파일의 디렉토리를 볼 필요가 있습니다. 트래픽 양은 매우 커서 초당 최소 수백 개의 새 파일이 표시됩니다. 현재 내가 생각이 이런 종류의 바쁜 루프를 사용하고 있습니다 :select/poll/kqueue/kevent를 사용하여 새 파일의 디렉토리를 확인하십시오.
while True:
time.sleep(0.2)
if len(os.listdir('.')) > 0:
# do stuff
나는 잠에서 보낸 시간을 많이보고 있어요 프로파일 링을 실행 한 후
, 나는이 폴링을 사용하도록 변경해야하는지 궁금 해요 대신.
select
에서 사용 가능한 클래스 중 하나를 사용하여 내 디렉토리를 폴링하려하지만 실제로 작동하는지 또는 잘못하고 있는지 확실하지 않습니다. 그때 때 디렉토리 변경 사항을 확인하기 위해 여러 가지 방법을 시도했습니다
fd = os.open('.', os.O_DIRECT)
:
나는 내 디렉토리에 대한 FD를 얻을. 예를 들어, 내가 노력 것들 중 하나였다
poll = select.poll()
poll.register(fd, select.POLLIN)
poll.poll() # returns (fd, 1) meaning 'ready to read'
os.read(fd, 4096) # prints largely gibberish but i can see that i'm pulling the files/folders contained in the directory at least
poll.poll() # returns (fd, 1) again
os.read(fd, 4096) # empty string - no more data
왜 읽을 자세한 내용은이 같은 여론 조사() 연기는? 디렉토리에서 뭔가가 변경된 경우에만 그렇게한다고 가정했습니다.
여기서도 가능한 일을하고 있습니까?
그렇지 않은 경우 while True: look for changes
에 대한 다른 더 나은 대안이 있습니까?
BSD를 사용하고 있으므로 inotify를 사용할 수 없으며 gamin도 아닌 것 같습니다. – gdm
gamin docs는 FreeBSD에서 사용 가능하지만 덜 최적 인 폴링 솔루션을 사용한다고 말합니다. 그래도 여전히 다른 어떤 것보다 빠를 수도 있습니다. –