나는 Thread :: Queue in Perl로 보스 워킹 크루 멀티 스레드 시나리오에서 일하고있다.
보스가 작업을 대기열에 추가하고 작업자가 대기열에서 대기열에서 대기열에 있습니다.
작업자가 대기열을 통해 x 초 동안 작업을 보내지 않을 경우 작업자가 다운 스트림 ping 메시지를 보내도록해야합니다.
시간 초과가있는 대기열에서 삭제하는 방법이없는 것 같습니다.
내가 놓친 것이 있습니까? 아니면 다른 접근 방식/다른 데이터 구조를 권장 하시겠습니까?Perl 스레드에서 읽기 :: 타임 아웃으로 큐
1
A
답변
1
당신은 Thread::Queue
객체 (I가 5.16 통해 5.8에서 구현이라고 생각) 공유 배열에 대한 축복 참조는 것을 알고, 기능성 자신을 추가 할 수 있습니다 위의 방법은 당신이하지 대기열 undef
또는 그렇지 않은 경우는 false 값 을 가정합니다
# main.pl
use threads;
use strict; use warnings;
use Thread::Queue::TimedDequeue;
use constant WORKER_PATIENCE => 10; # 10 seconds
my $queue = Thread::Queue::TimedDequeue->new();
...
sub worker {
my $item = $queue->dequeue(WORKER_PATIENCE);
timedout() unless $item;
...
}
참고 : 그런 짓을.
0
접근 방식/구조에 아무런 문제가 없으므로 "Thread :: Queue"에 대한 일부 시간 제한 컨트롤을 추가하기 만하면됩니다. 그 중 하나는 다음과 같습니다.
- 시간 기준을 사용하여 시간 초과를 감지하는 동안 자식 측에서 대기열을 확인하기위한 "수익률"기반 루프를 만듭니다.
- 은 "Thread :: Queue :: Duplex"또는 "Thread :: Queue :: Multiplex"모듈을 사용합니다.이 모듈은 비트 오버 일지라도 시간 초과 컨트롤을 구현합니다.
package Thread::Queue::TimedDequeue; use parent 'Thread::Queue'; use threads::shared qw(lock cond_timedwait); sub timed_dequeue { my ($q, $patience) = @_; # XXX revert to $q->dequeue() if $patience is negative? # $q->dequeue_nb() if $patience is zero? my $timelimit = time() + $patience; lock(@$q); until (@$q) { last if !cond_timedwait(@$q, $timelimit); } return shift if @$q; # We got an element # else we timed out. } 1;
하면 좋겠 그런 :
관련 문제
- 1. 타임 아웃으로 타이머를 만드는 방법
- 2. perl 프로세스 큐
- 3. ServiceStack Redis Client를 타임 아웃으로 구현하는 방법
- 4. Linq를 NHibernate ADO 명령 타임 아웃으로 설정
- 5. 안드로이드 소켓은 항상 타임 아웃으로 끝납니다
- 6. C에서 타임 아웃으로 신호 및 알람 사용
- 7. WPF : 타이머가있는 스레드에서 큐 구성
- 8. MSMQ 저속 큐 읽기
- 9. Perl 스레드에서 완전히 종료하십시오.
- 10. C++ Boost ASIO : 타임 아웃으로 읽고 쓰는 방법?
- 11. 보조 스레드에서 입력 읽기
- 12. 부스트 스레드에서 플래그 읽기
- 13. 여러 스레드에서 데이터베이스 큐 처리 - 디자인 조언
- 14. 데이터베이스 큐 - 타임 아웃이에 따라 별표에
- 15. Perl 읽기 파일 오류
- 16. Perl 변수에서 읽기
- 17. JPEG 파일 perl 읽기
- 18. 무한 타임 아웃으로 Sleep()을 사용하는 이유는 무엇입니까?
- 19. mysqli.reconnect는 타임 아웃으로 인해 실패한 쿼리를 다시 실행합니까?
- 20. 다른 스레드에서 콘솔 중지 읽기
- 21. 다른 스레드에서 조작중인 값 읽기
- 22. 스레드에서 배열 읽기, c, cygwin
- 23. 다중 스레드에서 MemoryStream에 스트림 읽기
- 24. MSMQ 문제 원격 개인 큐 읽기 (다시)
- 25. 소켓 읽기 및 타임 스탬프
- 26. 읽기 타임 아웃시 채널에 쓰기
- 27. perl 재귀 적 파일 읽기
- 28. 컴파일 타임 경고없이 별도의 스레드에서 클래스 인스턴스화
- 29. 데이터베이스 호출을하는 스레드에서 루비 타임 아웃 사용
- 30. 하스켈에서 블로킹 큐 구현
고마워요. -이게 내가 찾고있는 것입니다. 어쩌면 이것을 CPAN 패키지에 추가 할 수 있습니까? – weismat