Voici la méthode d'une classe héritée de threading.Thread. Cette méthode est appelée dans un for de la méthode run() asynchrone.
Bon, ou est le problème me diriez vous? Et bien voici ce qui se passe quand on l'appelle:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 def _next_timestamp(self) -> Fraction: """Return the next timestamp to be decoded.""" while True: for timestamp in sorted(set(map(Fraction, self._predictor.predict(PRED_BUFFER)))): print("timestamp predit", timestamp) if self._stop_flag: return StopIteration try: yield self._queues["request"].get_nowait() print("break") break # if a new timestamp in the predictor, reset the prediction except queue.Empty: if timestamp not in self._frames: print(timestamp, "n'est pas dans la queue") yield timestamp else: print(timestamp, "deja dans la queue") else: print("prediction terminee") yield self._queues["request"].get()
Jusque-là, le comportement est tout à fait attendu. Mais voyez ce que le code continue à m'afficher à l'infini juste après :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 >>> frame_anticipator = FrameAnticipator(video, 0, {}) >>> >>> timestamp predit 0 0 n'est pas dans la queue prediction terminee >>> frame_anticipator.snapshot(Fraction(0)) <av.VideoFrame, pts=0 yuv420p 1280x720 at 0x71ef653cbbe0> >>> frame_anticipator.snapshot(Fraction(1)) <av.VideoFrame, pts=968 yuv420p 1280x720 at 0x71ef653cbc40> >>> timestamp predit 0 0 deja dans la queue prediction terminee >>> frame_anticipator.snapshot(Fraction(2)) <av.VideoFrame, pts=1969 yuv420p 1280x720 at 0x71ef653cb400> >>>
Et cela a l'infinie !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 timestamp predit 4 4 n'est pas dans la queue timestamp predit 8 8 n'est pas dans la queue timestamp predit 562949953421313/35184372088832 562949953421313/35184372088832 n'est pas dans la queue timestamp predit 4 4 deja dans la queue timestamp predit 8 8 deja dans la queue timestamp predit 562949953421313/35184372088832 562949953421313/35184372088832 n'est pas dans la queue timestamp predit 4 4 deja dans la queue timestamp predit 8 8 deja dans la queue timestamp predit 562949953421313/35184372088832 562949953421313/35184372088832 n'est pas dans la queue timestamp predit 4 4 deja dans la queue ...
Pourquoi diable n'entre-t-il pas dans le else du for, alors que break n'est jamais atteint !?![]()





Répondre avec citation

Partager