I was trying to perform a geo analysis and the function CalculateGeometryAttributes produced None values when I wrapped the script in multiprocessing, but it worked correctly in a for loop.
def process(fc):
arcpy.env.workspace = "G:/usgrids2020/test1/"
arcpy.env.overwriteOutput=True
state = fc[34:-7]
print(f"Processing for {state.upper()}")
readTime = datetime.datetime.now()
# arcpy.env.workspace = os.path.join(gdb_path, f"usa{state}.gdb")
#Import the feature for boundary and water
# fc = f"usa{state[3:5]}_joined"
fcInMem = arcpy.management.CopyFeatures(fc, f"in_memory/usa{state}_fcInMem")
water_fc = f"{fc[:-7]}_water_layer"
waterInMem = arcpy.management.CopyFeatures(water_fc, f"in_memory/usa{state}_waterInMem")
#Create the temporary id for joining fields later
arcpy.AddField_management(fcInMem,'tempid','LONG')
arcpy.CalculateField_management(fcInMem,"tempid",'!OBJECTID!','PYTHON')
#Calculate the area(land+water) by GEODESIC method => Kytt recommended
arcpy.management.AddField(fcInMem, "GEODESIC_AREA", "FLOAT")
arcpy.management.CalculateGeometryAttributes(fcInMem, "GEODESIC_AREA AREA_GEODESIC", "", "SQUARE_METERS")
This is what it generated:
(None, 'USA_100030117003015')
(None, 'USA_100030127001011')
(None, 'USA_100030151002006')
(None, 'USA_100030121001003')
(None, 'USA_100030112051009')
(None, 'USA_100030148102015')
(None, 'USA_100030112062022')
(None, 'USA_100030168063009')
(None, 'USA_100030166141010')
(None, 'USA_100030164041013')
does the newer "memory" workspace behave differently than the "in_memory" workspace with multiprocessing?
I suspect a for loop would be better if using memory workspaces in any event
I tried without the "in_memory" as well but the result remains the same.