Найти - Пользователи
Полная версия: как прервать работу потоков в concurrent.futures?
Начало » Python для новичков » как прервать работу потоков в concurrent.futures?
1 2
Андрей Светлов
Зачем в workere? Вызывайте в главном потоке, прямо в обработчике сигнала.
Да, размер меняется и это нехорошо. Итерируйтесь по копии.
Игнат
если сделать копию:
            cp = set()
cp |= self.pending
for f in cp:
f.cancel()
не работает:

  File "/usr/local/lib/python3.2/concurrent/futures/_base.py", line 391, in result
raise CancelledError()
concurrent.futures._base.CancelledError
если итерировать по копии - я не знаю как получить элемент из self.pending
это множество set() и питон говорит что к нему нельзя обращаться по индексу

а если изменить тип self.pending на list, то валятся ошибки:
AttributeError: 'list' object has no attribute 'add'
AttributeError: 'list' object has no attribute 'discard'
как же тогда итерироваться по копии?
Андрей Светлов
for f in set(self.pending):
if not f.cancelled():
f.cancel()
Как-то так.
Игнат
отлично! теперь работает как надо и без ошибок :)
огромное спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB