Skip to content

Commit fb78ac8

Browse files
committed
Release 0.0.3
Correct License
1 parent 090d380 commit fb78ac8

File tree

5 files changed

+98
-208
lines changed

5 files changed

+98
-208
lines changed
-7.88 KB
Binary file not shown.
11.5 KB
Binary file not shown.
8.16 KB
Binary file not shown.

pyproject.toml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,16 @@ requires = ["setuptools>=61.0"]
33
build-backend = "setuptools.build_meta"
44
[project]
55
name = "auto_function_serving"
6-
version = "0.0.1"
6+
version = "0.0.3"
77
authors = [
88
{ name="Arrman Anicket Saha", email="arrmansa99+430@gmail.com" },
99
]
1010
description = "A python package to offload a function call to an http server automatically using a decorator."
1111
readme = "README.md"
12-
license = { file="LICENSE" }
1312
requires-python = ">=3.0"
1413
classifiers = [
1514
"Programming Language :: Python :: 3",
16-
"License :: OSI Approved :: MIT License",
15+
"License :: OSI Approved :: Apache Software License",
1716
"Operating System :: OS Independent",
1817
]
1918

Lines changed: 96 additions & 205 deletions
Original file line numberDiff line numberDiff line change
@@ -1,218 +1,109 @@
11
Metadata-Version: 2.1
22
Name: auto-function-serving
3-
Version: 0.0.1
3+
Version: 0.0.3
44
Summary: A python package to offload a function call to an http server automatically using a decorator.
55
Author-email: Arrman Anicket Saha <arrmansa99+430@gmail.com>
6-
License: Apache License
7-
Version 2.0, January 2004
8-
http://www.apache.org/licenses/
9-
10-
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
11-
12-
1. Definitions.
13-
14-
"License" shall mean the terms and conditions for use, reproduction,
15-
and distribution as defined by Sections 1 through 9 of this document.
16-
17-
"Licensor" shall mean the copyright owner or entity authorized by
18-
the copyright owner that is granting the License.
19-
20-
"Legal Entity" shall mean the union of the acting entity and all
21-
other entities that control, are controlled by, or are under common
22-
control with that entity. For the purposes of this definition,
23-
"control" means (i) the power, direct or indirect, to cause the
24-
direction or management of such entity, whether by contract or
25-
otherwise, or (ii) ownership of fifty percent (50%) or more of the
26-
outstanding shares, or (iii) beneficial ownership of such entity.
27-
28-
"You" (or "Your") shall mean an individual or Legal Entity
29-
exercising permissions granted by this License.
30-
31-
"Source" form shall mean the preferred form for making modifications,
32-
including but not limited to software source code, documentation
33-
source, and configuration files.
34-
35-
"Object" form shall mean any form resulting from mechanical
36-
transformation or translation of a Source form, including but
37-
not limited to compiled object code, generated documentation,
38-
and conversions to other media types.
39-
40-
"Work" shall mean the work of authorship, whether in Source or
41-
Object form, made available under the License, as indicated by a
42-
copyright notice that is included in or attached to the work
43-
(an example is provided in the Appendix below).
44-
45-
"Derivative Works" shall mean any work, whether in Source or Object
46-
form, that is based on (or derived from) the Work and for which the
47-
editorial revisions, annotations, elaborations, or other modifications
48-
represent, as a whole, an original work of authorship. For the purposes
49-
of this License, Derivative Works shall not include works that remain
50-
separable from, or merely link (or bind by name) to the interfaces of,
51-
the Work and Derivative Works thereof.
52-
53-
"Contribution" shall mean any work of authorship, including
54-
the original version of the Work and any modifications or additions
55-
to that Work or Derivative Works thereof, that is intentionally
56-
submitted to Licensor for inclusion in the Work by the copyright owner
57-
or by an individual or Legal Entity authorized to submit on behalf of
58-
the copyright owner. For the purposes of this definition, "submitted"
59-
means any form of electronic, verbal, or written communication sent
60-
to the Licensor or its representatives, including but not limited to
61-
communication on electronic mailing lists, source code control systems,
62-
and issue tracking systems that are managed by, or on behalf of, the
63-
Licensor for the purpose of discussing and improving the Work, but
64-
excluding communication that is conspicuously marked or otherwise
65-
designated in writing by the copyright owner as "Not a Contribution."
66-
67-
"Contributor" shall mean Licensor and any individual or Legal Entity
68-
on behalf of whom a Contribution has been received by Licensor and
69-
subsequently incorporated within the Work.
70-
71-
2. Grant of Copyright License. Subject to the terms and conditions of
72-
this License, each Contributor hereby grants to You a perpetual,
73-
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
74-
copyright license to reproduce, prepare Derivative Works of,
75-
publicly display, publicly perform, sublicense, and distribute the
76-
Work and such Derivative Works in Source or Object form.
77-
78-
3. Grant of Patent License. Subject to the terms and conditions of
79-
this License, each Contributor hereby grants to You a perpetual,
80-
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
81-
(except as stated in this section) patent license to make, have made,
82-
use, offer to sell, sell, import, and otherwise transfer the Work,
83-
where such license applies only to those patent claims licensable
84-
by such Contributor that are necessarily infringed by their
85-
Contribution(s) alone or by combination of their Contribution(s)
86-
with the Work to which such Contribution(s) was submitted. If You
87-
institute patent litigation against any entity (including a
88-
cross-claim or counterclaim in a lawsuit) alleging that the Work
89-
or a Contribution incorporated within the Work constitutes direct
90-
or contributory patent infringement, then any patent licenses
91-
granted to You under this License for that Work shall terminate
92-
as of the date such litigation is filed.
93-
94-
4. Redistribution. You may reproduce and distribute copies of the
95-
Work or Derivative Works thereof in any medium, with or without
96-
modifications, and in Source or Object form, provided that You
97-
meet the following conditions:
98-
99-
(a) You must give any other recipients of the Work or
100-
Derivative Works a copy of this License; and
101-
102-
(b) You must cause any modified files to carry prominent notices
103-
stating that You changed the files; and
104-
105-
(c) You must retain, in the Source form of any Derivative Works
106-
that You distribute, all copyright, patent, trademark, and
107-
attribution notices from the Source form of the Work,
108-
excluding those notices that do not pertain to any part of
109-
the Derivative Works; and
110-
111-
(d) If the Work includes a "NOTICE" text file as part of its
112-
distribution, then any Derivative Works that You distribute must
113-
include a readable copy of the attribution notices contained
114-
within such NOTICE file, excluding those notices that do not
115-
pertain to any part of the Derivative Works, in at least one
116-
of the following places: within a NOTICE text file distributed
117-
as part of the Derivative Works; within the Source form or
118-
documentation, if provided along with the Derivative Works; or,
119-
within a display generated by the Derivative Works, if and
120-
wherever such third-party notices normally appear. The contents
121-
of the NOTICE file are for informational purposes only and
122-
do not modify the License. You may add Your own attribution
123-
notices within Derivative Works that You distribute, alongside
124-
or as an addendum to the NOTICE text from the Work, provided
125-
that such additional attribution notices cannot be construed
126-
as modifying the License.
127-
128-
You may add Your own copyright statement to Your modifications and
129-
may provide additional or different license terms and conditions
130-
for use, reproduction, or distribution of Your modifications, or
131-
for any such Derivative Works as a whole, provided Your use,
132-
reproduction, and distribution of the Work otherwise complies with
133-
the conditions stated in this License.
134-
135-
5. Submission of Contributions. Unless You explicitly state otherwise,
136-
any Contribution intentionally submitted for inclusion in the Work
137-
by You to the Licensor shall be under the terms and conditions of
138-
this License, without any additional terms or conditions.
139-
Notwithstanding the above, nothing herein shall supersede or modify
140-
the terms of any separate license agreement you may have executed
141-
with Licensor regarding such Contributions.
142-
143-
6. Trademarks. This License does not grant permission to use the trade
144-
names, trademarks, service marks, or product names of the Licensor,
145-
except as required for reasonable and customary use in describing the
146-
origin of the Work and reproducing the content of the NOTICE file.
147-
148-
7. Disclaimer of Warranty. Unless required by applicable law or
149-
agreed to in writing, Licensor provides the Work (and each
150-
Contributor provides its Contributions) on an "AS IS" BASIS,
151-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
152-
implied, including, without limitation, any warranties or conditions
153-
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
154-
PARTICULAR PURPOSE. You are solely responsible for determining the
155-
appropriateness of using or redistributing the Work and assume any
156-
risks associated with Your exercise of permissions under this License.
157-
158-
8. Limitation of Liability. In no event and under no legal theory,
159-
whether in tort (including negligence), contract, or otherwise,
160-
unless required by applicable law (such as deliberate and grossly
161-
negligent acts) or agreed to in writing, shall any Contributor be
162-
liable to You for damages, including any direct, indirect, special,
163-
incidental, or consequential damages of any character arising as a
164-
result of this License or out of the use or inability to use the
165-
Work (including but not limited to damages for loss of goodwill,
166-
work stoppage, computer failure or malfunction, or any and all
167-
other commercial damages or losses), even if such Contributor
168-
has been advised of the possibility of such damages.
169-
170-
9. Accepting Warranty or Additional Liability. While redistributing
171-
the Work or Derivative Works thereof, You may choose to offer,
172-
and charge a fee for, acceptance of support, warranty, indemnity,
173-
or other liability obligations and/or rights consistent with this
174-
License. However, in accepting such obligations, You may act only
175-
on Your own behalf and on Your sole responsibility, not on behalf
176-
of any other Contributor, and only if You agree to indemnify,
177-
defend, and hold each Contributor harmless for any liability
178-
incurred by, or claims asserted against, such Contributor by reason
179-
of your accepting any such warranty or additional liability.
180-
181-
END OF TERMS AND CONDITIONS
182-
183-
APPENDIX: How to apply the Apache License to your work.
184-
185-
To apply the Apache License to your work, attach the following
186-
boilerplate notice, with the fields enclosed by brackets "[]"
187-
replaced with your own identifying information. (Don't include
188-
the brackets!) The text should be enclosed in the appropriate
189-
comment syntax for the file format. We also recommend that a
190-
file or class name and description of purpose be included on the
191-
same "printed page" as the copyright notice for easier
192-
identification within third-party archives.
193-
194-
Copyright [yyyy] [name of copyright owner]
195-
196-
Licensed under the Apache License, Version 2.0 (the "License");
197-
you may not use this file except in compliance with the License.
198-
You may obtain a copy of the License at
199-
200-
http://www.apache.org/licenses/LICENSE-2.0
201-
202-
Unless required by applicable law or agreed to in writing, software
203-
distributed under the License is distributed on an "AS IS" BASIS,
204-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
205-
See the License for the specific language governing permissions and
206-
limitations under the License.
207-
2086
Project-URL: Homepage, https://github.com/arrmansa/auto-function-serving
2097
Project-URL: Bug Tracker, https://github.com/arrmansa/auto-function-serving/issues
2108
Classifier: Programming Language :: Python :: 3
211-
Classifier: License :: OSI Approved :: MIT License
9+
Classifier: License :: OSI Approved :: Apache Software License
21210
Classifier: Operating System :: OS Independent
21311
Requires-Python: >=3.0
21412
Description-Content-Type: text/markdown
21513
License-File: LICENSE
21614

21715
# auto-function-serving
218-
A python package to offload a function call to an http server running on localhost automatically using a decorator. Compatible with multiprocessing, pickle and flask.
16+
17+
A python package to offload a function call to an http server running on localhost automatically using a decorator. Should work with multiprocessing, pickle, flask and others.
18+
19+
## Why
20+
21+
Imagine a case of a multi threaded or multiprocessing application where 1 or few functions are heavily resource (cpu or memory) intensive, but the other functions can run in parallel.\
22+
Example - an api call followed by tokenization and classification using a large DL model followed by further API calls.\
23+
In such a case, it would make sense to create a server (using torchserve or tfserving) to serve requests.\
24+
ServerHandler does this automatically during runtime
25+
26+
## Reccomended Usage
27+
```python
28+
from somemodule import someheavyfunction
29+
from auto_function_serving.ServerHandler import ServerHandler
30+
someheavyfunction = ServerHandler.decorator(someheavyfunction)
31+
```
32+
Any calls to this new **someheavyfunction** will make requests to 1 instance of a process running a [http.server.HTTPServer](https://docs.python.org/3/library/http.server.html) which runs the function within it. Even calls made from different processes, threads, multiprocessing or servers like flask.\
33+
It can also be used like a traditional decorator for functions with no dependencies specified outside the function.
34+
```python
35+
from auto_function_serving.ServerHandler import ServerHandler
36+
@ServerHandler.decorator
37+
def someheavyfunctionwithnodependency(args,**kwargs):
38+
for i in range(big_number)
39+
someexpensivecomputation
40+
```
41+
42+
## Installation
43+
44+
Use the package manager pip to install [auto_function_serving](https://pypi.org/project/auto-function-serving/)
45+
```bash
46+
pip install auto_function_serving
47+
```
48+
49+
## More Usage
50+
In general :
51+
```
52+
some independent code with a callable
53+
```
54+
can be replaced with
55+
```python
56+
from auto_function_serving.ServerHandler import ServerHandler
57+
callable_name = ServerHandler("""
58+
some independent code with a callable
59+
""", "callable_name")
60+
```
61+
62+
Example :
63+
```python
64+
import module1
65+
import module2
66+
def functionname(someinput):
67+
a = module1.function1(someinput)
68+
return module2.function2(a)
69+
```
70+
can be replaced with
71+
```python
72+
from auto_function_serving.ServerHandler import ServerHandler
73+
functionname = ServerHandler("""
74+
import module1
75+
import module2
76+
def functionname(someinput):
77+
a = module1.function1(someinput)
78+
return module2.function2(a)
79+
""", "functionname")
80+
```
81+
# How does this work?
82+
Code for the server is stored in ServerHandler.base_code, inspect.cleandoc and some string formatting is used to fill in the blanks.\
83+
A port from 50000 to 60000 is chosen by hashing the input text to make it independent of the source of a function. Collisions are possible, but unlikely. The port can be specified if needed.
84+
```python
85+
from somemodule import someheavyfunction
86+
from auto_function_serving.ServerHandler import ServerHandler
87+
someheavyfunction = ServerHandler.decorator(someheavyfunction, port = 4321)
88+
```
89+
ServerHandler.ip_address is set as "127.0.0.1".\
90+
The server process is started with Popen (or multiprocessing if specified), and the first thing it does is import socket and bind the port - if it's not available the code stops after an exception. Therefore only 1 instance of the server runs at a time on a machine.\
91+
We know the function is ready after we can recieve a valid get request from the server.\
92+
Inputs and outputs are sent as bytes, converted to and from objects using pickle.
93+
94+
## Performance (On my machine)
95+
using urllib.request seemed to give the best performance.\
96+
~2ms overhead for small input and output (few bytes).\
97+
~10ms overhead for 0.5 mb input and output (1mb total transfer).\
98+
~60ms overhead for 5 mb input and output (10 mb total transfer).
99+
100+
## Other things to look into
101+
Libraries : Celery, Tfserving, Torchserve, Flask\
102+
Sending globals and locals to exec\
103+
ast trees
104+
105+
## Contributing
106+
Pull requests are welcome.
107+
108+
## License
109+
[Apache License 2.0](https://choosealicense.com/licenses/apache-2.0/)

0 commit comments

Comments
 (0)