Ошибка 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

Как это исправить? Спасибо


Ответы (0 шт):