python 使用ThreadPool 创建线程,后台执行并check
来源:互联网 发布:php pack 转换c 编辑:程序博客网 时间:2024/06/16 10:02
1,后台执行
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/78607822
未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys
2,说明
使用python的ThreadPool 创建线程池,然后异步执行返回一个随机数字。
这个数字假设就是 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 multiprocessing.pool import ThreadPoolfrom multiprocessing.pool import ApplyResultfrom tornado import gen# 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)_workers = ThreadPool(10)_result = {}# 后台任务。def blocking_task(n, tid): time.sleep(n) print(tid) _result[tid] = {"finish"}class AddJobHandler(RequestHandler): @gen.coroutine def get(self): tid = str(int(time.time() * 10000)) _workers.apply_async(blocking_task, (10, tid)) # 传递参数 10 秒。 self.write(tid) self.finish() # 先finish 掉,然后在后台执行。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/78607822
未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys
阅读全文
0 0
- python 使用ThreadPool 创建线程,后台执行并check
- python 使用@run_on_executor 创建线程,后台执行并check(2)
- python threadpool 线程池使用
- python线程池(threadpool)模块使用
- python线程池(threadpool)模块使用
- python线程池(threadpool)模块使用
- python 线程池threadpool(使用篇)
- python线程池(threadpool)模块使用
- python线程池库threadpool使用实例
- python线程池(threadpool)模块使用python2.7
- Python 线程池(threadpool)
- ThreadPool 线程池的使用
- 线程池ThreadPool使用示例
- 使用 Task 替换 ThreadPool ,异步监测所有线程(任务)是否全部执行完毕
- 单例模式创建线程池-ThreadPool
- threadpool——python线程池
- Python多线程简易版 - 线程池threadpool
- python 线程池threadpool之实现
- IO流总结(2)----字节流
- 基于矢量成果从影像提取中深度学习样本库
- TSMenuLabel 给UILabel加menuController的控件
- Java初识继承和多态
- 【Scikit-Learn 中文文档】交叉分解
- python 使用ThreadPool 创建线程,后台执行并check
- 【Scikit-Learn 中文文档 】安装 scikit-learn | ApacheCN
- xrecyclerview的刷新和加载
- 面试题6:重建二叉树
- Line的配置模式及cisco常用show命令
- JavaScript——引用类型之Array篇(数组的基本操作)
- HDOJ 畅通工程 JAVA 1232
- javax.mail.AuthenticationFailedException: 535 Error: authentication failed
- Android audio切换设备通道流程