1. xlwt引起的字符串长度限制
Exception: String longer than 32767 characters
由于xlwt引起的excel写入的字符串,长度不能大于32767。
1. 换txt写入,或者用其他处理excel的工具包。
2. 在递归中写入限制,使得输出的长度不大于32767。
2. 递归深度限制解除
import sys sys.setrecursionlimit(10**6)
3. Overflow问题
python multiprocessing-OverflowError('无法序列化大于4GiB的字节对象')
解决pickle溢出。
更改multiprocessing库中使用的pickle的默认协议。 正如评论中指出的那样,此解决方案仅适用于Linux和OS多处理库 :
首先创建一个新的分离模块 pickle4reducer.py
from multiprocessing.reduction import ForkingPickler, AbstractReducer
class ForkingPickler4(ForkingPickler):
def __init__(self, *args):
if len(args) > 1:
args[1] = 2
else:
args.append(2)
super().__init__(*args)
@classmethod
def dumps(cls, obj, protocol=4):
return ForkingPickler.dumps(obj, protocol)
def dump(obj, file, protocol=4):
ForkingPickler4(file, protocol).dump(obj)
class Pickle4Reducer(AbstractReducer):
ForkingPickler = ForkingPickler4
register = ForkingPickler4.register
dump = dump
然后,在您的主脚本中,您需要添加以下内容:
import pickle4reducer
import multiprocessing as mp
ctx = mp.get_context()
ctx.reducer = pickle4reducer.Pickle4Reducer()
with mp.Pool(4) as p:
# do something