Hello guys
I need your help about Python of ArcGIS run on Apache. It is important for me because I much resolve it soon.
I am running Arcpy on Apache 2.4.23 within mod_wsgi but ArcGIS has the problem when execute CutFill.
The following is Apache configuration:
WSGIPythonPath "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3"
WSGIScriptAlias / "C:\Workspace\Arcpy\apache-env\adapter.wsgi"
<Directory "C:/Workspace/Arcpy/apache-env/">
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
Require all granted
</Directory>
And adapter.wsgi content is
# coding: utf-8
import sys, os
sys.path.insert(0, "C:/Workspace/Arcpy/apache-env")
import bottle
import index
dirpath = os.path.dirname(os.path.abspath(__file__))
sys.path.append(dirpath)
os.chdir(dirpath)
application = bottle.default_app()
I have written Python code in index.py file like
import os, sys
import bottle, arcpy, uuid
from arcpy.sa import CutFill
from gevent import monkey; monkey.patch_all()
from bottle import get
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
app = bottleget(path='/cutfill', method="GET")
def cutfill():
# set overwriteOutput
arcpy.env.overwriteOutput = True
# init data files
in_before_surface = 'C:\\Workspace\\Arcpy\\apache-env\\cutfill\\a5027708f8.tif'
in_after_surface = 'C:\\Workspace\\Arcpy\\apache-env\\cutfill\\2c963f75b3'
z_factor = 1
try:
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
# Execute CutFill
outCutFill = CutFill(in_before_surface, in_after_surface, z_factor)
# Save the output
temporary_cut_fill = arcpy.env.workspace + "\\" + str(uuid.uuid4().hex) + ".tif"
outCutFill.save(temporary_cut_fill)
# get Cut and Fill values
cut = 0
fill = 0
result = {}
rows = arcpy.SearchCursor(temporary_cut_fill, ["Volume", "Area"])
for row in rows:
val = row.getValue("VOLUME")
if val > 0:
cut = cut + val
else:
fill = fill + val
# Assign the value into variable
result['Cut'] = cut
result['Fill'] = fill
result['Volume'] = cut + fill
return result
except Exception as error:
print("{}".format(str(error)))
return {'error': str(error)}
# Default route for GET
get(path='/', method='GET')
def default_route():
return "Homepage (8080)"
if __name__ == '__main__':
# prepare Arcpy environments
cur_dir_path = os.path.dirname(os.path.realpath(__file__))
app.config.load_config(cur_dir_path + "\\app.conf")
try:
# Arcpy can overwrite output
arcpy.env.overwriteOutput = True
# set workspace dir
arcpy.env.workspace = app.config['app.output_path']
# initiation for volume calculation
arcpy.CheckOutExtension("3D")
arcpy.CheckOutExtension("spatial")
except Exception as error:
print("error: {}".format(str(error)))
app.run(host='0.0.0.0', server="gevent", port=8080, reloader=True , debug=True)
The next, I start Apache by command: C:\Apache24\bin\httpd.exe
To check what I did, I open browser/Postman
- If I access homepage (http://localhost:8080) => It works.
- If I access http://localhost:8080/cutfill. It runs in few seconds and ArcGIS displays the pop-up and be stopped.
Here is the pop-up
I check Apache log and have seen
[Mon Nov 13 18:55:37.646186 2017] [mpm_winnt:notice] [pid 43960:tid 532] AH00455: Apache/2.4.23 (Win64) mod_wsgi/4.5.20 Python/3.4 configured -- resuming normal operations
[Mon Nov 13 18:55:37.646186 2017] [mpm_winnt:notice] [pid 43960:tid 532] AH00456: Apache Lounge VC10 Server built: Jul 9 2016 11:59:00
[Mon Nov 13 18:55:37.646186 2017] [core:notice] [pid 43960:tid 532] AH00094: Command line: 'httpd.exe -d C:/Apache24'
[Mon Nov 13 18:55:37.646186 2017] [core:debug] [pid 43960:tid 532] log.c(1543): AH02639: Using SO_REUSEPORT: no (0)
[Mon Nov 13 18:55:37.647164 2017] [mpm_winnt:notice] [pid 43960:tid 532] AH00418: Parent: Created child process 112032
[Mon Nov 13 18:55:37.647164 2017] [mpm_winnt:debug] [pid 43960:tid 532] mpm_winnt.c(429): AH00402: Parent: Sent the scoreboard to the child
[Mon Nov 13 18:55:37.865186 2017] [mpm_winnt:debug] [pid 112032:tid 516] mpm_winnt.c(1718): AH00453: Child process is running
[Mon Nov 13 18:55:37.865186 2017] [wsgi:info] [pid 112032:tid 516] mod_wsgi (pid=112032): Initializing Python.
[Mon Nov 13 18:55:37.921188 2017] [wsgi:info] [pid 112032:tid 516] mod_wsgi (pid=112032): Attach interpreter ''.
[Mon Nov 13 18:55:37.923189 2017] [wsgi:info] [pid 112032:tid 516] mod_wsgi (pid=112032): Adding 'C:\\Program Files\\ArcGIS\\Pro\\bin\\Python\\envs\\arcgispro-py3' to path.
[Mon Nov 13 18:55:37.926189 2017] [mpm_winnt:debug] [pid 112032:tid 516] mpm_winnt.c(343): AH00391: Child: Retrieved our scoreboard from the parent.
[Mon Nov 13 18:55:37.926189 2017] [mpm_winnt:debug] [pid 43960:tid 532] mpm_winnt.c(512): AH00408: Parent: Duplicating socket 504 (0.0.0.0:8080) and sending it to child process 112032
[Mon Nov 13 18:55:37.926189 2017] [mpm_winnt:debug] [pid 112032:tid 516] mpm_winnt.c(465): AH00403: Child: Waiting for data for listening socket 0.0.0.0:8080
[Mon Nov 13 18:55:37.927189 2017] [mpm_winnt:debug] [pid 43960:tid 532] mpm_winnt.c(512): AH00408: Parent: Duplicating socket 508 ([::]:8080) and sending it to child process 112032
[Mon Nov 13 18:55:37.927189 2017] [mpm_winnt:debug] [pid 43960:tid 532] mpm_winnt.c(531): AH00411: Parent: Sent 2 listeners to child 112032
[Mon Nov 13 18:55:37.927189 2017] [mpm_winnt:debug] [pid 112032:tid 516] mpm_winnt.c(465): AH00403: Child: Waiting for data for listening socket [::]:8080
[Mon Nov 13 18:55:37.927189 2017] [mpm_winnt:debug] [pid 112032:tid 516] mpm_winnt.c(490): AH00407: Child: retrieved 2 listeners from parent
[Mon Nov 13 18:55:37.927189 2017] [mpm_winnt:debug] [pid 112032:tid 516] child.c(1020): AH00352: Child: Acquired the start mutex.
[Mon Nov 13 18:55:37.927189 2017] [mpm_winnt:notice] [pid 112032:tid 516] AH00354: Child: Starting 64 worker threads.
[Mon Nov 13 18:55:37.929151 2017] [mpm_winnt:debug] [pid 112032:tid 1164] child.c(399): AH00334: Child: Accept thread listening on 0.0.0.0:8080 using AcceptFilter data
[Mon Nov 13 18:55:37.929151 2017] [mpm_winnt:debug] [pid 112032:tid 1172] child.c(399): AH00334: Child: Accept thread listening on [::]:8080 using AcceptFilter data
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[Mon Nov 13 18:56:06.092403 2017] [authz_core:debug] [pid 112032:tid 1180] mod_authz_core.c(806): [client ::1:52362] AH01626: authorization result of Require all granted: granted
[Mon Nov 13 18:56:06.092403 2017] [authz_core:debug] [pid 112032:tid 1180] mod_authz_core.c(806): [client ::1:52362] AH01626: authorization result of <RequireAny>: granted
[Mon Nov 13 18:56:06.092403 2017] [authz_core:debug] [pid 112032:tid 1180] mod_authz_core.c(806): [client ::1:52362] AH01626: authorization result of Require all granted: granted
[Mon Nov 13 18:56:06.092403 2017] [authz_core:debug] [pid 112032:tid 1180] mod_authz_core.c(806): [client ::1:52362] AH01626: authorization result of <RequireAny>: granted
[Mon Nov 13 18:56:06.093403 2017] [wsgi:info] [pid 112032:tid 1180] [client ::1:52362] mod_wsgi (pid=112032, process='', application=''): Loading WSGI script 'C:/Workspace/Arcpy/apache-env/adapter.wsgi'.
[Mon Nov 13 18:56:19.479013 2017] [mpm_winnt:notice] [pid 43960:tid 532] AH00428: Parent: child process 112032 exited with status 4294967295 -- Restarting.
[Mon Nov 13 18:56:19.501013 2017] [mpm_winnt:notice] [pid 43960:tid 532] AH00455: Apache/2.4.23 (Win64) mod_wsgi/4.5.20 Python/3.4 configured -- resuming normal operations
[Mon Nov 13 18:56:19.501013 2017] [mpm_winnt:notice] [pid 43960:tid 532] AH00456: Apache Lounge VC10 Server built: Jul 9 2016 11:59:00
[Mon Nov 13 18:56:19.501013 2017] [core:notice] [pid 43960:tid 532] AH00094: Command line: 'httpd.exe -d C:/Apache24'
[Mon Nov 13 18:56:19.501013 2017] [core:debug] [pid 43960:tid 532] log.c(1543): AH02639: Using SO_REUSEPORT: no (0)
[Mon Nov 13 18:56:19.502013 2017] [mpm_winnt:notice] [pid 43960:tid 532] AH00418: Parent: Created child process 45568
[Mon Nov 13 18:56:19.502013 2017] [mpm_winnt:debug] [pid 43960:tid 532] mpm_winnt.c(429): AH00402: Parent: Sent the scoreboard to the child
[Mon Nov 13 18:56:19.799012 2017] [mpm_winnt:debug] [pid 45568:tid 520] mpm_winnt.c(1718): AH00453: Child process is running
[Mon Nov 13 18:56:19.800013 2017] [wsgi:info] [pid 45568:tid 520] mod_wsgi (pid=45568): Initializing Python.
[Mon Nov 13 18:56:19.852012 2017] [wsgi:info] [pid 45568:tid 520] mod_wsgi (pid=45568): Attach interpreter ''.
[Mon Nov 13 18:56:19.853012 2017] [wsgi:info] [pid 45568:tid 520] mod_wsgi (pid=45568): Adding 'C:\\Program Files\\ArcGIS\\Pro\\bin\\Python\\envs\\arcgispro-py3' to path.
[Mon Nov 13 18:56:19.856012 2017] [mpm_winnt:debug] [pid 45568:tid 520] mpm_winnt.c(343): AH00391: Child: Retrieved our scoreboard from the parent.
[Mon Nov 13 18:56:19.856012 2017] [mpm_winnt:debug] [pid 43960:tid 532] mpm_winnt.c(512): AH00408: Parent: Duplicating socket 508 ([::]:8080) and sending it to child process 45568
[Mon Nov 13 18:56:19.857012 2017] [mpm_winnt:debug] [pid 45568:tid 520] mpm_winnt.c(465): AH00403: Child: Waiting for data for listening socket 0.0.0.0:8080
[Mon Nov 13 18:56:19.857012 2017] [mpm_winnt:debug] [pid 43960:tid 532] mpm_winnt.c(512): AH00408: Parent: Duplicating socket 504 (0.0.0.0:8080) and sending it to child process 45568
[Mon Nov 13 18:56:19.857012 2017] [mpm_winnt:debug] [pid 43960:tid 532] mpm_winnt.c(531): AH00411: Parent: Sent 2 listeners to child 45568
[Mon Nov 13 18:56:19.857012 2017] [mpm_winnt:debug] [pid 45568:tid 520] mpm_winnt.c(465): AH00403: Child: Waiting for data for listening socket [::]:8080
[Mon Nov 13 18:56:19.857012 2017] [mpm_winnt:debug] [pid 45568:tid 520] mpm_winnt.c(490): AH00407: Child: retrieved 2 listeners from parent
[Mon Nov 13 18:56:19.857012 2017] [mpm_winnt:debug] [pid 45568:tid 520] child.c(1020): AH00352: Child: Acquired the start mutex.
[Mon Nov 13 18:56:19.857012 2017] [mpm_winnt:notice] [pid 45568:tid 520] AH00354: Child: Starting 64 worker threads.
[Mon Nov 13 18:56:19.859012 2017] [mpm_winnt:debug] [pid 45568:tid 1168] child.c(399): AH00334: Child: Accept thread listening on 0.0.0.0:8080 using AcceptFilter data
[Mon Nov 13 18:56:19.859012 2017] [mpm_winnt:debug] [pid 45568:tid 1176] child.c(399): AH00334: Child: Accept thread listening on [::]:8080 using AcceptFilter data
Note:
I am using:
- Windows server 2012 RC (64bit)
- Apache version 2.4.23 (64bit) within mod_wsgi.so (64bit)
- ArcGIS Pro version 1.3 (Python version 3.4.4) 64bit
===================================================================
Other way to start my application that I don't need Apache, I mean I run directly my python file in Windows command prompt like python index.py
Everything works well.
Thank a lot.