I have one suggestion about the usage of the voxelIdList
If you are using it as a lookup for the hash of previously seen items, using a list is going to be progressively slower and slower over time as the list grows, because doing "x in list" is O(n) complexity. You might want to use a set():
##
voxelIdSet = set()
...
if cubeId in voxelIdSet :
continue
else:
voxelIdSet.add(cubeId)
##
A set is O(1) complexity, so doing "x in set" will instantly find the item by its hash, as opposed to have to scan the entire list looking for an equality match.