一个简单的库,在没有任何服务的所有服务器节点上运行精确的函数

serviceless-distributor的Python项目详细描述


无服务分销商

无服务分发服务器是一个库,可以帮助您在没有任何其他服务的情况下运行确切的函数。

它是怎么工作的?

它只是一个decorator,它接受参数和关键字参数,对它们进行pickle并将它们发送到具有http请求的其他节点。

使用效率高吗?

答案取决于您选择的模式。如果设置了Distributor.bounce_mode = False,则一个节点需要向所有节点发送数据,但是如果设置了Distributor.bounce_mode = True(默认设置),则所有节点都将向下一个节点发送数据,以便所有节点只发出一个请求,而不是len(SERVICELESS_DISTRIBUTOR_NODES)

安全吗?

它是安全的,因为您将key保密。库使用django.core.signing副本(djangoless-signing)对数据进行签名和签名,以确保通过服务器发送数据。但是始终建议配置服务器以限制连接到此终结点的IP。

烧瓶快速启动

如果不使用django,请使用此库如果使用django,请检查django-serviceless-distributor

安装库

pip install serviceless-distributor

将此片段添加到应用程序中

....fromserviceless_distributorimportDistributor........# Key to sign your dataDistributor.key=b"literally anything but you'll have to keep it secret"# Nodes IPs (Do not use load balancer IP, we couldn't know# if all nodes affected if you use load balancer IP)Distributor.nodes=["http://10.0.0.0","http://10.0.0.1"]# Headers to use while sending data# (This can be used to change "Host" to pass Host restriction)Distributor.headers={}....@app.route("/serviceless_distributor",methods=['POST'])defhello():data=request.form.get('username')ifdata:Distributor._run_function(data)return""

注册要分发的函数

fromserviceless_distributorimportDistributor@Distributor.register_function()defsum_arguments(*args):returnsum(args)# Or lets suppose you want to distribute an imported functionfromsome_moduleimportsome_functionsome_function=Distributor.register_function()(some_function)

(非)常见问题

  1. 如何为不同的功能设置不同的节点集?

    special_nodes=["http://10.0.0.0","http://10.0.0.1"]@Distributor.register_function(nodes=special_nodes)defsum_arguments(*args):returnsum(args)# Orfromsome_moduleimportsome_functionDistributor.register_function(nodes=special_nodes)(some_function)
  2. 我能换条路吗?

    是的,您可以更改Distributor.path,但也不要忘记根据您所做的更改更改更改您的url配置。

  3. 图书馆同时发出多少个请求?

    默认为10,但可以通过设置Distributor.simultaneous_requests进行更改。attention同时请求意味着将注册的函数分发给其他节点。如果在一行中运行注册函数x次,服务器将发送x次请求。它不会为每个注册的函数运行创建x线程。

  4. 它堵塞了吗?

    no,它使用concurrent.futures.ThreadPoolExecutor创建线程并返回已注册函数的输出。

  5. 为什么我要使用这个而不是其他库?

    唯一的原因可能是省钱这就是我创造这个的原因。对我来说,与其他库相比,这不是一个好的解决方案,但至少在没有任何其他服务器的情况下我能做到最好。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java无法调用扩展超级非抽象类的抽象类方法   java Hibernate 5关联[]引用了一个未映射的实体[]:origin(User.hbm.xml)   java禁用JSpinner中的数字分组   java Spring的环境抽象是否使用PropertyEditor?   java是否创建自定义注释作为FrameworkAnnotation的别名?   java如何将Selenium安装为Unix守护程序?   java三值if运算符在正则if-one中   有人能帮我在一个程序上分析java代码吗?   java Spring集成5.0反应堆类型支持   java Websphere 7线程转储分析   java Akka期货和监管策略如何应对失败   使用Clojure中的可选参数调用java函数的构造函数   java如何消除安卓按钮的延迟?   Android上使用X.509证书的java认证应用程序   java如何获取列表中特定类型的所有对象?   java如何将json数组字符串转换为json对象   安卓 Java从长时间返回的日期不正确   java Android Studio在尝试从TextEdit搜索单词时崩溃   ViewPager的java子项