Skip to content

Commit 936ee5f

Browse files
author
arch
committed
windows fix hanging thread
1 parent 2845f6c commit 936ee5f

File tree

1 file changed

+19
-33
lines changed

1 file changed

+19
-33
lines changed

funscript_editor/algorithms/funscriptgenerator.py

Lines changed: 19 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -75,30 +75,7 @@ class FunscriptGeneratorParameter:
7575
max_threshold: float = float(HYPERPARAMETER['max_threshold'])
7676

7777

78-
def merge_score(item: list, number_of_trackers: int) -> list:
79-
""" Merge score for given number of trackers
8078

81-
Note:
82-
Python multiprocessing methods use a mp.SimpleQueue to pass tasks to the worker processes.
83-
Everything that goes through the mp.SimpleQueue must be pickable.
84-
In python functions are only picklable if they are defined at the top-level of a module.
85-
86-
Args:
87-
item (list): score for each tracker
88-
number_of_trackers (int): number of used tracker (pairs)
89-
90-
Returns:
91-
list: merged score
92-
"""
93-
if number_of_trackers == 1:
94-
return item[0] if len(item) > 0 else []
95-
else:
96-
max_frame_number = max([len(item[i]) for i in range(number_of_trackers)])
97-
arr = np.ma.empty((max_frame_number,number_of_trackers))
98-
arr.mask = True
99-
for tracker_number in range(number_of_trackers):
100-
arr[:item[tracker_number].shape[0],tracker_number] = item[tracker_number]
101-
return list(filter(None.__ne__, arr.mean(axis=1).tolist()))
10279

10380

10481
class FunscriptGeneratorThread(QtCore.QThread):
@@ -413,17 +390,26 @@ def calculate_score(self, bboxes) -> None:
413390
score['y'][tracker_number] = np.array([max([x[1] for x in bboxes['Woman'][tracker_number]]) - w[1] for w in bboxes['Woman'][tracker_number]])
414391

415392
self.logger.info("Merge Scores")
416-
"""
417-
pool, queue = {}, {}
418-
for metric in score.keys():
419-
queue[metric] = mp.Queue()
420-
pool[metric] = threading.Thread(target=merge_score, args=(score[metric], self.params.number_of_trackers, queue[metric], ))
421-
pool[metric].start()
422393

423-
for metric in score.keys():
424-
pool[metric].join()
425-
score[metric] = queue[metric].get()
426-
"""
394+
def merge_score(item: list, number_of_trackers: int) -> list:
395+
""" Merge score for given number of trackers
396+
397+
Args:
398+
item (list): score for each tracker
399+
number_of_trackers (int): number of used tracker (pairs)
400+
401+
Returns:
402+
list: merged score
403+
"""
404+
if number_of_trackers == 1:
405+
return item[0] if len(item) > 0 else []
406+
else:
407+
max_frame_number = max([len(item[i]) for i in range(number_of_trackers)])
408+
arr = np.ma.empty((max_frame_number,number_of_trackers))
409+
arr.mask = True
410+
for tracker_number in range(number_of_trackers):
411+
arr[:item[tracker_number].shape[0],tracker_number] = item[tracker_number]
412+
return list(filter(None.__ne__, arr.mean(axis=1).tolist()))
427413

428414
for metric in score.keys():
429415
score[metric] = merge_score(score[metric], self.params.number_of_trackers)

0 commit comments

Comments
 (0)