CN110471777B - 一种Python-Web环境中多用户共享使用Spark集群的实现方法和系统 - Google Patents
一种Python-Web环境中多用户共享使用Spark集群的实现方法和系统 Download PDFInfo
- Publication number
- CN110471777B CN110471777B CN201910568205.2A CN201910568205A CN110471777B CN 110471777 B CN110471777 B CN 110471777B CN 201910568205 A CN201910568205 A CN 201910568205A CN 110471777 B CN110471777 B CN 110471777B
- Authority
- CN
- China
- Prior art keywords
- task
- spark
- user
- tasks
- request
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Multi Processors (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种Python‑Web环境中多用户共享使用Spark集群的实现方法和系统。本发明引入多进程来支撑多个Spark上下文,能够利用有限数量的Spark上下文来服务和支持多用户的任务计算请求;利用协程而不是线程来守护子进程,协程之间自主调度;能够将任务计算结果或状态异步返回以便实时响应用户的请求,满足了Web实时交互式使用的需求;利用了Spark任务间调度的特性,对于一些耗时较长的任务,给予用户是否终止该任务的权限,能够让Web用户终止正在运行的Spark任务。本发明能够解决Python开发环境中多Web用户共享使用Spark集群的问题。
Description
技术领域
本发明属于软件设计与应用技术领域,涉及一种应用技术实现方式,尤其涉及一种Python 开发环境中多用户通过Web交互式使用Spark集群的应用技术实现方法和系统。
背景技术
Apache Spark作为当前最为流行的开源大数据计算框架,广泛应用于数据处理和分析应用。其使用方式一般有两种:一是通过spark-submit脚本提交打包成jar包的用户逻辑代码;二是用户可以通过spark-shell与Spark交互式地进行数据处理。这两种方式虽然足够灵活,但在某些实际应用中并不适用,比如当Web用户希望通过Web请求与Spark集群交互时。这种情况将面临多Web用户共享使用同一个Spark集群的问题。
Spark的“应用间调度”特性可以支撑多用户共享使用同一个Spark集群。“静态资源分配”是最简单的一种资源(内存、CPU核)分配方式,每个Spark应用可以使用的资源受静态配置决定。“动态资源分配”则可以在应用间动态进行资源调度,即当一个Spark应用需要更多计算资源时,它可以请求并利用未被占用的资源;另一方面,一个Spark应用应释放所占用的但并未使用的多余资源。
Apache Livy通过REST接口实现与Spark集群的交互。一定程度上可以解决上述问题。用户可以使用REST接口或RPC客户端库提交经序列化的Spark代码段、同步或异步检索结果并管理Spark上下文(SparkContext)。其实现了Spark上下文可以被多个用户,多个Spark任务共享使用。因其对提交的代码进行序列化处理,对于复杂的Spark任务分析代码,Livy在调试方面面临困难。且Livy项目目前还处于孵化期,许多功能有待增加和完善。
发明内容
本发明提出了一种技术架构,旨在说明如何利用Spark原生的“应用间调度”特性以及 Python对于异步、协程、多进程等的实现来解决Python开发环境中多Web用户共享使用Spark 集群的问题。
多Web用户共享使用Spark集群意味着多用户可同时通过Web交互的方式向Spark集群提交任务计算请求。每个用户的每次任务计算请求将触发生成一个Spark应用即一个Spark 上下文的实例。
因此,本发明涉及的技术架构包含下述具体问题的解决:
(1)需要引入多进程来支撑多个Spark上下文,以便同时支持多用户的任务计算请求,方便独立管理单个任务生命周期。然而,可并发的进程数量相较于用户请求数量将小得多。因此,需要解决如何利用有限数量的Spark上下文来服务所有用户的请求。
(2)一个Spark计算任务通常至少需要秒级时间,用户阻塞等待任务计算结果显然不符合Web实时交互式使用方式,因此需要将任务计算结果或状态异步返回以便实时响应用户的请求。
(3)对于一些耗时较长的任务,应给予用户是否终止该任务的权限。因此需要解决如何让Web用户终止正在运行的Spark任务。
本发明解决上述问题采用的实现方式是:
对于问题(1):
需要对用户的任务计算请求进行缓存,本发明采用异步队列来实现(异步是指CPU不阻塞等待I/O(读写)操作结果),并利用关系型数据库对任务进行持久化存储。服务任务基于简单的先进先出(FIFO,First In First Out)机制,同时限制一个用户可同时运行的任务数以免 Spark集群被某一用户的长耗时计算任务占用。考虑到Python的GIL特性(Global Interpreter Lock),有限的Spark上下文的维护即多进程的维护采用协程进行。本发明利用了Tornado框架作为Web服务器(Tornado为使用Python语言编写的轻量级Web服务器,支持异步网络I/O),并使用了其关于异步队列及协程的实现。
初始时,会启动一定数目的子进程(每个子进程对应一个Spark上下文,与Spark集群连接,用以提交用户的计算请求);每个子进程与主进程中的一个协程通过异步消息队列通信。主进程中的协程消耗异步任务队列中的任务,通过异步消息队列将该任务告知相应的子进程,子进程将任务提交至Spark集群并阻塞等待任务计算结果,若出错则返回错误信息。
进程池中子进程数目减少时(用户终止任务时,相应的子进程被杀死),会启动一个新的子进程,同时,I/O事件循环(I/O Event Loop,一个监听I/O事件包括读写等并针对事件进行相应处理的循环,实现包括select,epoll,kqueue等)加入一个新的协程来守护该子进程。
对于问题(2):
用户提交任务后会得到该任务的唯一ID。可通过该ID查询任务的状态和执行结果。用户与Web服务器之间采用WebSocket进行通信。采用关系型数据库来存储用户的任务计算请求,每个请求为一条记录,包括任务的唯一ID,提交者,提交时间,状态,结束时间等信息。每次任务状态更新均写入关系型数据库。任务初始状态为“等待”状态;协程在提交任务至进程后,更新任务状态为“运行”状态;协程在获取进程返回的结果后,更新任务状态为“完成”状态。对于耗时较少的计算任务,服务器可实时将计算结果推送给用户。对于耗时较长的计算任务,可通过查询关系型数据库来获得任务状态。子进程会阻塞等待Spark的任务计算结果,但主进程将在协程之间调度,即在子进程池中寻找空闲的子进程以便服务其他请求,若没有空闲子进程则等待。
对于问题(3):
处理用户终止任务请求的流程如下:Web服务器接收用户停止任务的请求,对于正在运行的任务,主进程停止相应的子进程,启动一个新的子进程,并由一个新的协程守护,而当前的协程则返回,结束生命周期;对于已经执行完或还在等待的任务,Web服务器给出相应的错误描述告知用户终止任务请求不合理。
具体来说,本发明采用的技术方案如下:
一种Python-Web环境中多用户共享使用Spark集群的实现方法,包括以下步骤:
Web服务器接收用户端提交的任务计算请求,将任务存入异步任务队列中;
Web服务器的主进程中的协程,将所述异步任务队列中的任务通过异步消息队列告知相应的子进程,每个子进程对应一个Spark上下文;
子进程将任务提交至Spark集群以进行任务计算。
进一步地,所述Web服务器为采用Tornado框架的Web服务器。
进一步地,根据任务请求的时间顺序采用先到先服务的策略,在此基础上限制同一用户最多能够运行的任务数以保证Spark集群能够被多个不同用户共享。
进一步地,子进程将任务提交至Spark集群后,阻塞等待Spark集群的任务计算结果,主进程在协程之间调度,即在子进程池中寻找空闲的子进程以便服务其他用户端的请求,若没有空闲子进程则等待。
进一步地,采用关系型数据库存储用户端的任务计算请求,每个任务计算请求为一条记录,包括任务的唯一ID、提交者、提交时间、状态、结束时间;每次任务状态更新均写入关系型数据库;用户端提交任务后,从所述关系型数据库获得任务的唯一ID,通过该ID查询任务的状态和执行结果。
进一步地,所述每次任务状态更新均写入关系型数据库,包括:
任务初始状态为“等待”状态;
协程在提交任务至子进程后,更新任务状态为“运行”状态;
子进程将任务计算结果或错误信息返回给协程后,协程更新任务状态为“完成”或“错误”。
进一步地,对于处于“运行”状态的任务,用户能够选择终止该任务的运行,终止任务后相应的子进程被杀死,Spark上下文丢失,相应的Spark应用结束即不再占用Spark集群的资源。
进一步地,处理用户终止任务请求的步骤包括:
Web服务器接收用户端终止任务的请求;
对于正在运行的任务,主进程停止相应的子进程,启动一个新的子进程,并由一个新的协程守护,而当前的协程则返回,结束生命周期;
对于已经执行完或还在等待的任务,Web服务器给出相应的错误描述告知用户端终止任务请求不合理。
一种用于实现Python-Web环境中多用户共享使用Spark集群的Web服务器,其包括:
接收任务请求模块,用于接收用户端提交的任务计算请求,将任务存入异步任务队列中;
调度任务请求模块,用于根据任务请求的时间顺序采用先到先服务的策略,在此基础上限制同一用户最多可运行的任务数以保证Spark集群可以被多个不同用户共享;
处理任务请求模块,用于通过主进程中的协程,将所述异步任务队列中的任务通过异步消息队列告知相应的子进程,每个子进程对应一个Spark上下文;
提交任务模块,用于通过子进程将任务提交至Spark集群以进行任务计算。
一种Python-Web环境中多用户共享使用Spark集群的实现系统,包括用户端,与所述用户端建立通信连接的上面所述的Web服务器,以及与所述Web服务器建立通信连接的Spark 集群。
与现有技术相比,本发明的有益效果是:
1)本发明引入多进程来支撑多个Spark上下文,能够利用有限数量的Spark上下文来服务和支持多用户的任务计算请求;
2)本发明利用协程而不是线程来守护子进程,协程之间自主调度。线程消耗系统资源,操作系统一般对可启动的线程数有限制。对于大规模的Spark集群,如果通过多线程的方式将引入过多负担。Spark计算任务通常需要数十秒至数分钟,Web应用等待Spark集群计算结果可以认为是占用I/O资源。因此采用异步I/O来实现更为合适。
3)本发明能够将任务计算结果或状态异步返回以便实时响应用户的请求,满足了Web 实时交互式使用的需求;
4)本发明利用了Spark任务间调度的特性。对于一些耗时较长的任务,给予用户是否终止该任务的权限,能够让Web用户终止正在运行的Spark任务。
5)本发明采用先到先服务的机制来服务用户请求,同时在此基础上限制同一用户最多可运行的任务数,以此来保证用户间的相对公平。
附图说明
图1是本发明的技术方案的架构图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例和附图,对本发明做进一步详细说明。
本发明的具体实施方式如图1所示,包括用户、UI(Web网站页面及相应功能,由Django Web框架实现)、Web服务器(Web Server)和Spark集群(Spark Cluster)。用户端与Web服务器之间采用WebSocket协议进行通信。图1中zmq即ZeroMQ,是一个基于消息队列的多线程网络库,用于实现异步网络通信。
以下以处理用户的一个任务计算请求为例详细叙述本发明涉及的实现方式。
系统初启动后,异步任务队列(Task Queue)为空,一定数目的子进程(process)启动,与Spark集群建立连接,同样数目的协程(coroutine)加入I/O事件循环,协程与子进程通过 zmq进行通信。
(1)接收任务请求
Web服务器接收用户请求,将其转化为任务对象,放入异步任务队列中,同时在关系型数据(图1中的MySQL)中进行持久化存储。用户获得该任务的唯一ID。
(2)处理任务请求
多个协程消耗异步任务队列中的任务,若所有协程均在异步等待任务计算结果(异步等待子进程的消息),则队列中的任务只能等待被消耗,此时当前任务处于“等待”状态。当某个协程得到当前子进程的异步消息,将循环开始消耗队列中的任务,交于当前子进程执行,此时任务处于“运行”状态。从任务队列中获取任务的步骤如下所述:
首先初始化两个全局队列,一个异步队列q1用于缓存用户任务提交请求,一个同步双向队列q2用于缓存检查过的任务。
①若q2不为空,则从q2中取一个任务,若该任务满足要求(即提交该任务的用户当前处于运行状态的任务数num_running_tasks<MAX_TASKS_PER_USER,其中 MAX_TASKS_PER_USER表示设定的每个用户最多可同时运行的任务数),则返回该任务并恢复q2中剩余任务的顺序;若该任务不满足要求则循环此步骤直至q2为空并恢复q2中任务顺序。
②若q2为空,则从q1中取一个任务,q1为空则异步等待;否则若该任务满足要求,则返回该任务;若不满足要求,则将任务压入q2。循环此步骤直至q1为空。
实现上述过程的伪代码如下:
子进程通过Spark上下文(Spark Context)与Spark集群连接,提交Spark任务后,同步等待(即阻塞等待)计算结果。其同步等待将导致相应的协程I/O事件循环去调度其他的协程。子进程结束同步等待后将任务计算结果或错误信息返回协程,协程更新任务状态为“完成”或“错误”。
(3)任务状态或计算结果异步查看
用户提交计算请求后即可通过查询关系型数据库来查看任务的当前状态。任务“完成”状态时,可查看任务计算结果。
(4)终止任务
对于处于“运行”状态的任务,用户可以选择终止该任务的运行。终止任务后,相应的子进程被杀死,Spark上下文丢失,相应的Spark应用结束即不再占用Spark集群的资源。为维护一定数量的Spark上下文,子进程被杀死后会随即启动一个新的子进程并交由一个新的协程守护,而当前的协程将返回退出I/O事件循环。
本发明的技术方案中未详细描述的部分可以采用现有技术实现。
本发明除以上实施例以外,可以利用Python语言关于异步的一些实现,例如asyncio(包括协程、I/O事件循环等接口)、aiohttp包(包括异步http服务器API,WebSocket等接口) 进行本发明方案具体步骤的实现。相较于利用Tornado已经封装好的接口,利用各种工具包构建本发明方案所需的模块要花费更多精力。
本发明另一实施例提供一种用于实现Python-Web环境中多用户共享使用Spark集群的 Web服务器,其包括:
接收任务请求模块,用于接收用户端提交的任务计算请求,将任务存入异步任务队列中;
调度任务请求模块,用于根据任务请求的时间顺序采用先到先服务的策略,在此基础上限制同一用户最多可运行的任务数以保证Spark集群可以被多个不同用户共享;
处理任务请求模块,用于通过主进程中的协程,将所述异步任务队列中的任务通过异步消息队列告知相应的子进程,每个子进程对应一个Spark上下文;
提交任务模块,用于通过子进程将任务提交至Spark集群以进行任务计算。
所述Web服务器采用关系型数据库存储用户端的任务计算请求,每个任务计算请求为一条记录,包括任务的唯一ID、提交者、提交时间、状态、结束时间;每次任务状态更新均写入关系型数据库。
本发明另一实施例一种Python-Web环境中多用户共享使用Spark集群的实现系统,包括用户端,与所述用户端建立通信连接的上面所述的Web服务器,以及与所述Web服务器建立通信连接的Spark集群。
以上实施方式仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的原理和范围,本发明的保护范围应以权利要求书所述为准。
Claims (6)
1.一种Python-Web环境中多用户共享使用Spark集群的实现方法,其特征在于,包括以下步骤:
Python Web环境中的Web服务器接收用户端提交的任务计算请求,将任务存入异步任务队列中;根据任务请求的时间顺序采用先到先服务的策略,在此基础上限制同一用户最多能够运行的任务数以保证Spark集群能够被多个不同用户共享;所述Web服务器为采用Tornado框架的Web服务器;用户端与Web服务器之间采用WebSocket协议进行通信;
Web服务器的主进程中的协程,将所述异步任务队列中的任务通过异步消息队列告知相应的子进程,每个子进程对应一个Spark上下文,利用有限数量的Spark上下文来服务和支持多用户的任务计算请求;利用协程而不是线程来守护子进程,协程之间自主调度;协程与子进程通过ZeroMQ进行通信;
子进程将任务提交至Spark集群以进行任务计算;
采用关系型数据库存储用户端的任务计算请求,每个任务计算请求为一条记录,包括任务的唯一ID、提交者、提交时间、状态、结束时间;每次任务状态更新均写入关系型数据库;用户端提交任务后,从所述关系型数据库获得任务的唯一ID,通过该ID查询任务的状态和执行结果;
对于处于“运行”状态的任务,用户能够选择终止该任务的运行;处理用户终止任务请求的步骤包括:Web服务器接收用户端终止任务的请求;对于正在运行的任务,主进程停止相应的子进程,启动一个新的子进程,并由一个新的协程守护,而当前的协程则返回,结束生命周期;对于已经执行完或还在等待的任务,Web服务器给出相应的错误描述告知用户端终止任务请求不合理。
2.根据权利要求1所述的方法,其特征在于,子进程将任务提交至Spark集群后,阻塞等待Spark集群的任务计算结果,主进程在协程之间调度,即在子进程池中寻找空闲的子进程以便服务其他用户端的请求,若没有空闲子进程则等待。
3.根据权利要求1所述的方法,其特征在于,所述每次任务状态更新均写入关系型数据库,包括:任务初始状态为“等待”状态;协程在提交任务至子进程后,更新任务状态为“运行”状态;子进程将任务计算结果或错误信息返回给协程后,协程更新任务状态为“完成”或“错误”。
4.根据权利要求3所述的方法,其特征在于,终止任务后相应的子进程被杀死,Spark上下文丢失,相应的Spark应用结束即不再占用Spark集群的资源。
5.一种用于实现权利要求1所述方法的Python-Web环境中多用户共享使用Spark集群的Web服务器,其特征在于,包括:
接收任务请求模块,用于接收用户端提交的任务计算请求,将任务存入异步任务队列中;
任务调度模块,用于根据任务请求的时间顺序采用先到先服务的策略,在此基础上限制同一用户最多能够运行的任务数以保证Spark集群能够被多个不同用户共享;
处理任务请求模块,用于通过主进程中的协程,将所述异步任务队列中的任务通过异步消息队列告知相应的子进程,每个子进程对应一个Spark上下文;
提交任务模块,用于通过子进程将任务提交至Spark集群以进行任务计算。
6.一种Python-Web环境中多用户共享使用Spark集群的实现系统,其特征在于,包括用户端,与所述用户端建立通信连接的权利要求5所述的Web服务器,以及与所述Web服务器建立通信连接的Spark集群。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910568205.2A CN110471777B (zh) | 2019-06-27 | 2019-06-27 | 一种Python-Web环境中多用户共享使用Spark集群的实现方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910568205.2A CN110471777B (zh) | 2019-06-27 | 2019-06-27 | 一种Python-Web环境中多用户共享使用Spark集群的实现方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110471777A CN110471777A (zh) | 2019-11-19 |
CN110471777B true CN110471777B (zh) | 2022-04-15 |
Family
ID=68506996
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910568205.2A Active CN110471777B (zh) | 2019-06-27 | 2019-06-27 | 一种Python-Web环境中多用户共享使用Spark集群的实现方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110471777B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111158872B (zh) * | 2019-12-16 | 2023-06-16 | 北京明朝万达科技股份有限公司 | 一种提交并守护spark任务的方法及装置 |
CN111182061B (zh) * | 2019-12-30 | 2023-04-14 | 苏宁云计算有限公司 | 任务分发处理方法、系统、计算机设备和存储介质 |
CN111367636B (zh) * | 2020-02-28 | 2023-10-20 | 网易(杭州)网络有限公司 | 用户任务的处理方法、装置、电子设备和计算机可读介质 |
CN113672402A (zh) * | 2021-07-22 | 2021-11-19 | 杭州未名信科科技有限公司 | 一种基于Py4j服务的在线数据处理方法、装置、存储介质及终端 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104142844A (zh) * | 2014-08-18 | 2014-11-12 | 广东欧珀移动通信有限公司 | 一种清理移动终端进程的方法及装置 |
CN106293922A (zh) * | 2016-08-16 | 2017-01-04 | 天津西瑞尔信息工程有限公司 | 异步任务处理方法及系统 |
CN106980546A (zh) * | 2016-01-18 | 2017-07-25 | 阿里巴巴集团控股有限公司 | 一种任务异步执行方法、装置及系统 |
CN107797874A (zh) * | 2017-10-12 | 2018-03-13 | 南京中新赛克科技有限责任公司 | 一种基于嵌入式jetty和spark on yarn框架的资源管控方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104156267B (zh) * | 2013-05-14 | 2017-10-10 | 华为技术有限公司 | 任务分配方法、任务分配装置及片上网络 |
US10560404B2 (en) * | 2017-06-14 | 2020-02-11 | Citrix Systems, Inc. | Real-time cloud-based messaging system |
-
2019
- 2019-06-27 CN CN201910568205.2A patent/CN110471777B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104142844A (zh) * | 2014-08-18 | 2014-11-12 | 广东欧珀移动通信有限公司 | 一种清理移动终端进程的方法及装置 |
CN106980546A (zh) * | 2016-01-18 | 2017-07-25 | 阿里巴巴集团控股有限公司 | 一种任务异步执行方法、装置及系统 |
CN106293922A (zh) * | 2016-08-16 | 2017-01-04 | 天津西瑞尔信息工程有限公司 | 异步任务处理方法及系统 |
CN107797874A (zh) * | 2017-10-12 | 2018-03-13 | 南京中新赛克科技有限责任公司 | 一种基于嵌入式jetty和spark on yarn框架的资源管控方法 |
Non-Patent Citations (1)
Title |
---|
简单介绍Python的tornado框架中的协程异步实现原理;C Wong;《https://www.jb51.net/aritcle/64747.htm》;20150423;1-5页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110471777A (zh) | 2019-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110471777B (zh) | 一种Python-Web环境中多用户共享使用Spark集群的实现方法和系统 | |
US10109030B1 (en) | Queue-based GPU virtualization and management system | |
CN110431806B (zh) | 分布式资源管理中低时延节点本地调度的系统和方法 | |
Allcock et al. | Experience and practice of batch scheduling on leadership supercomputers at argonne | |
US9973512B2 (en) | Determining variable wait time in an asynchronous call-back system based on calculated average sub-queue wait time | |
CN110795254A (zh) | 一种基于php处理高并发io的方法 | |
JP2006515690A (ja) | 複数のプロセッサを有するデータ処理システムと、複数のプロセッサを有するデータ処理システムのためのタスクスケジューラと、タスクスケジューリングの対応する方法 | |
CN108351783A (zh) | 多核数字信号处理系统中处理任务的方法和装置 | |
JP2009251708A (ja) | I/oノード制御方式及び方法 | |
KR20120070303A (ko) | 실시간 멀티코어 시스템의 동기화 스케쥴링 장치 및 방법 | |
CN103927225A (zh) | 一种多核心架构的互联网信息处理优化方法 | |
US20120297216A1 (en) | Dynamically selecting active polling or timed waits | |
Khalifa¹ et al. | Collaborative autonomic resource management system for mobile cloud computing | |
US10037225B2 (en) | Method and system for scheduling computing | |
Reano et al. | Intra-node memory safe gpu co-scheduling | |
WO2023274278A1 (zh) | 一种资源调度的方法、装置及计算节点 | |
Qureshi et al. | Grid resource allocation for real-time data-intensive tasks | |
CN114721818A (zh) | 一种基于Kubernetes集群的GPU分时共享方法和系统 | |
CN113515361B (zh) | 一种面向服务的轻量级异构计算集群系统 | |
Sai et al. | Producer-Consumer problem using Thread pool | |
Golchin et al. | Tuned pipes: end-to-end throughput and delay guarantees for USB devices | |
JP7346649B2 (ja) | 同期制御システムおよび同期制御方法 | |
Chiang et al. | DynamoML: Dynamic Resource Management Operators for Machine Learning Workloads. | |
Hu et al. | Real-time schedule algorithm with temporal and spatial isolation feature for mixed criticality system | |
Sadooghi et al. | CloudKon: a Cloud enabled Distributed tasK executiON framework |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |