python 使用@run_on_executor 创建线程,后台执行并check(2)
来源:互联网 发布:阿里云手机空间 编辑:程序博客网 时间:2024/06/10 16:51
1,后台执行第二个方法
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/78617643
未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys
之前写过一个博客。
http://blog.csdn.net/freewebsys/article/details/78607822
使用threadPool的方式创建线程的。现在换一个方式。
2,说明
使用python的@run_on_executor 创建线程池,然后异步执行返回一个随机数字。
必须定义一个executor的属性,然后run_on_executor 注解才管用。
executor = ThreadPoolExecutor(max_workers=MAX_WORKERS)
这个数字假设就是 tid,然后讲计算结果放到 map里面存储。
如果map 里面有 tid 的数据,则说明已经执行完毕。
同时前段使用 setInterval 定时执行check 方法。
然后检查成功之后 使用clearInterval 关闭循环。
代码如下:
#!/usr/bin/python3# -*- coding: utf-8 -*-import timefrom tornado.httpserver import HTTPServerfrom tornado.ioloop import IOLoopfrom tornado.web import Application, asynchronous, RequestHandlerfrom tornado import genfrom tornado.concurrent import run_on_executorfrom concurrent.futures import ThreadPoolExecutor# `pip install futures` for python2# https://gist.github.com/methane/2185380 参考html_content = """<!DOCTYPE html><html lang="zh-CN"><head> <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script></head><body> <h1>任务测试</h1></br> <button id="job">开始</button></body></html><script type="text/javascript"> function job_check(timer,tid) { $.ajax({ type: "GET", url: "job_check?tid="+tid, success: function(msg){ console.log(msg); if(msg != ""){ alert( "任务结果: " + msg ); clearInterval(timer);//结束轮询 } } }); } jQuery(function($) { $("#job").click( function () { $.ajax({ type: "GET", url: "add_job", success: function(tid){ alert( "开始任务: " + tid ); timer = setInterval(function(){ console.log("run."); job_check(timer,tid); },1000); } }); }); })</script>"""class MainPage(RequestHandler): def get(self): self.write(html_content)MAX_WORKERS = 4_result = {}class AddJobHandler(RequestHandler): # 必须定义一个executor的属性,然后run_on_executor 注解才管用。 executor = ThreadPoolExecutor(max_workers=MAX_WORKERS) @run_on_executor # 标记成后台程序执行。 def background_task(self, tid): time.sleep(10) # 传递参数 10 秒。 _result[tid] = {"finish"} @gen.coroutine def get(self): tid = str(int(time.time() * 10000)) self.background_task(tid) self.write(tid)class JobCheckHandler(RequestHandler): def get(self): tid = self.get_argument("tid") if tid in _result.keys(): out = _result[tid] # 结果 del _result[tid] # 删除tid的数据。 self.write(str(out)) else: self.write("")# main 启动。if __name__ == "__main__": HTTPServer(Application([ ("/", MainPage), ("/add_job", AddJobHandler), ("/job_check", JobCheckHandler) ], debug=True)).listen(9999) print("start web .") IOLoop.instance().start()
3,演示效果
前端的js 使用的是百度的cdn。速度还可以呢。
http://cdn.code.baidu.com/
4,总结
python 写几个代码还是非常的方便的,开发效率超级的高呢。
使用python 执行一个后台的代码也是非常的快的。
默认下,tornado 支持一些异步执行。也可以研究下使用。
http://tornado.readthedocs.io/en/stable/gen.html
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/78617643
未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys
- python 使用@run_on_executor 创建线程,后台执行并check(2)
- python 使用ThreadPool 创建线程,后台执行并check
- Linux下创建并执行python脚本
- python 创建多个线程并启动
- 使用plist创建精灵并执行动画
- 使用plist创建精灵并执行动画
- 使用plist创建精灵并执行动画
- 创建线程并让它开始执行的实例
- Java创建并执行线程的四种方法
- 使用Swing Worker线程 --执行后台任务的新方法
- 使用Swing Worker线程 --执行后台任务的新方法
- 使用Swing Worker线程 --执行后台任务的新方法
- 使用Swing Worker线程 --执行后台任务的新方法
- 使用Swing Worker线程 --执行后台任务的新方法
- 简单快速实现使用线程后台执行作业的方法
- Android中使用Handler和Thread线程执行后台操作
- Android中使用Handler和Thread线程执行后台操作
- Android创建Service后台常驻服务并使用Broadcast通信
- Linux(CentOS)下安装注册中心(Zookeeper-3.4.6)
- 报错nested exception is org.springframework.core.NestedIOException: ASM ClassReader failed to...
- mysql的存储过程
- ASN.1笔记——标准编码规则BER
- 老徐带你玩儿转小程序---小店版案例讲解
- python 使用@run_on_executor 创建线程,后台执行并check(2)
- 4.13 基本类型的类封装
- 大
- 深入浅出ClassLoader
- window10下vmware14pro虚拟机黑屏的处理方式
- 如何用java图形化界面实现一个登录窗口
- Struts2学习笔记(5)-处理结果及结果类型详解
- 【Scikit-Learn 中文文档】朴素贝叶斯
- google sample