Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
9.2.2023: Due to updates GitLab will be unavailable for some minutes between 9:00 and 11:00.
Open sidebar
badw-it
DHParser
Commits
353390e2
Commit
353390e2
authored
Mar 05, 2019
by
eckhart
Browse files
- stub for a compilation-server-module added
parent
bb486035
Changes
2
Hide whitespace changes
Inline
Side-by-side
CHANGES.txt
View file @
353390e2
...
...
@@ -3,6 +3,7 @@ DHParser Version 0.8.9 (x.x.2019)
DHParser Version 0.8.8 (4.3.2019)
.................................
...
...
DHParser/server.py
0 → 100644
View file @
353390e2
# server.py - an asynchronous tcp-server to compile sources with DHParser
#
# Copyright 2019 by Eckhart Arnold (arnold@badw.de)
# Bavarian Academy of Sciences an Humanities (badw.de)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied. See the License for the specific language governing
# permissions and limitations under the License.
"""
Module `server` contains an asynchronous tcp-server that receives compilation
requests, runs custom compilation functions in a multiprocessing.Pool.
This allows to start a DHParser-compilation environment just once and save the
startup time of DHParser for each subsequent compilation. In particular, with
a just-in-time-compiler like PyPy (https://pypy.org) setting up a
compilation-server is highly recommended, because jit-compilers typically
sacrifice startup-speed for running-speed.
It is up to the compilation function to either return the result of the
compilation in serialized form, or just save the compilation results on the
file system an merely return an success or failure message. Module `server`
does not define any of these message. This is completely up to the clients
of module `server`, i.e. the compilation-modules, to decide.
"""
import
asyncio
# TODO: implement compilation-server!
async
def
handle_echo
(
reader
,
writer
):
# TODO: Add deliver/answer-challenge-mechanism here to verify the source
# see file:///usr/share/doc/python/html/library/multiprocessing.html?highlight=connection#module-multiprocessing.connection
data
=
await
reader
.
read
(
100
)
message
=
data
.
decode
()
addr
=
writer
.
get_extra_info
(
'peername'
)
print
(
f
"Received
{
message
!r}
from
{
addr
!r}
"
)
await
asyncio
.
sleep
(
5
)
print
(
f
"Send:
{
message
!r}
"
)
writer
.
write
(
data
)
await
writer
.
drain
()
print
(
"Close the connection"
)
writer
.
close
()
async
def
main
():
server
=
await
asyncio
.
start_server
(
handle_echo
,
'127.0.0.1'
,
8888
)
addr
=
server
.
sockets
[
0
].
getsockname
()
print
(
f
'Serving on
{
addr
}
'
)
async
with
server
:
await
server
.
serve_forever
()
asyncio
.
run
(
main
())
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment