Ошибка PicklingError: Can't pickle при использовании ProcessPoolExecutor. Как исправить?
У меня есть функция, которую запускаю в потоке. Вот функция:
def polygon_n(i):
print('Area %s'%(i))
pol = arr_test[i][0]
poly = Polygon(pol)
global z
z=z+1
x_max, x_min = max_min_coord(pol, 0)
y_max, y_min = max_min_coord(pol, 1)
gen_long(Island, z, 'long', x_min, x_max)
gen_lat(Island, z, 'lat', y_min, y_max)
gen100(Island, z, 'long', x_min, x_max)
gen100(Island, z, 'lat', y_min, y_max)
gen_double(Island, z, 'long', x_min, x_max)
gen_double(Island, z, 'lat', y_min, y_max)
with open('Files2/%s_%s_%s_%s_%s_%s.txt'%(Island, z, 'long', x_min, x_max, 'double'), 'r') as long:
for i in long:
i_1, i_2 = i.split()
with open('Files2/%s_%s_%s_%s_%s_%s.txt'%(Island, z, 'lat', y_min, y_max, 'double'), 'r') as short:
for k in short:
k_1, k_2 = k.split()
string = ''
coord = [[float(i_1),float(k_1)],[float(i_2),float(k_1)],[float(i_2),float(k_2)],
[float(i_1),float(k_2)], [float(i_1),float(k_1)]]
pol_pixel = Polygon(coord)
if poly.intersects(pol_pixel):
global count
count+=1
row = ['%s'%count, coord]
cursor.insertRow(row)
string += '{"area": "' + str('%s'%count)+'", "geometry": "{\\"type\\": \\"Polygon\\", \\"coordinates\\": [[['+str(i_1) + ',' + str(k_1)+ ']'+',' + '[' + str(i_2)+','+str(k_1) + ']'+',' + '['+str(i_2)+ ',' + str(k_2) +'],' + '['+str(i_1)+ ',' + str(k_2) +'],' + '[' + str(i_1)+ ',' + str(k_1) +']]]}"}\n'
fin.write(string)
Вот цыкл запуска в потоке:
start = time.time()
with arcpy.da.InsertCursor(feature_class, ['ID','SHAPE@']) as cursor, open('JSON/%s.json'%Island, 'w') as fin:
for i in range(0, len(arr_test)):
executor.submit(lambda : polygon_n(i))
print(z)
del cursor
end = time.time()
После запуска цыкла, я получаю ошибку:
Traceback (most recent call last):
File "C:\Users\ivan\Anaconda2\lib\multiprocessing\queues.py", line 264, in _feed
send(obj)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
Traceback (most recent call last):
File "C:\Users\ivan\Anaconda2\lib\multiprocessing\queues.py", line 264, in _feed
send(obj)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
Traceback (most recent call last):
File "C:\Users\ivan\Anaconda2\lib\multiprocessing\queues.py", line 264, in _feed
send(obj)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
Traceback (most recent call last):
File "C:\Users\ivan\Anaconda2\lib\multiprocessing\queues.py", line 264, in _feed
send(obj)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
Traceback (most recent call last):
File "C:\Users\ivan\Anaconda2\lib\multiprocessing\queues.py", line 264, in _feed
send(obj)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
Traceback (most recent call last):
File "C:\Users\ivan\Anaconda2\lib\multiprocessing\queues.py", line 264, in _feed
send(obj)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
Traceback (most recent call last):
File "C:\Users\ivan\Anaconda2\lib\multiprocessing\queues.py", line 264, in _feed
send(obj)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
Traceback (most recent call last):
File "C:\Users\ivan\Anaconda2\lib\multiprocessing\queues.py", line 264, in _feed
send(obj)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
Traceback (most recent call last):
File "C:\Users\ivan\Anaconda2\lib\multiprocessing\queues.py", line 264, in _feed
send(obj)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
Как это исправить? Спасибо