Измененный от эти рецепты раздел itertools Python документы:
from itertools import zip_longest
def grouper(iterable, n, fillvalue=None):
args = [iter(iterable)] * n
return zip_longest(*args, fillvalue=fillvalue)
Пример
В псевдокоде для хранения примера кратким.
grouper('ABCDEFG', 3, 'x') --> 'ABC' 'DEF' 'Gxx'
Примечание: на использовании Python 2 izip_longest
вместо zip_longest
.
Это связано с взаимодействием системных вызовов ОС, сигналами и тем, как это обрабатывается в модуле многопроцессорности. Я не совсем уверен, ошибка это или особенность, но это довольно сложная территория, поскольку именно здесь python встречается с ОС.
Проблема в том, что многопроцессорность блокируется на waitpid до тех пор, пока дочерний элемент, которого он ожидает, не завершится. Однако, поскольку вы установили обработчик сигналов для SIGINT, и ваша программа получает этот сигнал, она прерывает системный вызов для выполнения обработчика сигнала, и waitpid завершает работу, указывая, что он был прерван сигналом. Python обрабатывает этот случай с помощью исключений.
В качестве обходного пути вы можете заключить проблемные разделы в цикл while и блоки try / catch, подобные этому, либо там, где вы ждете завершения потоков, Создайте план обслуживания с этими параметрами: - Проверить целостность базы данных - Реорганизовать индекс - Очистите историю
Запланируйте это раз в неделю, и все будет в порядке.