代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Python
】
多任务多线程任务管理类
作者:
小原周
/ 发布于
2015/8/3
/
705
最近在学习Python,尝试写了一个多任务多线程任务的管理类,可以设置多个任务并行执行,每个任务的并发数;可以设置每个任务的执行次数,也可以通过自定义函数控制每个任务是否结束。 是个Python新手写的,大家勿喷。 task_manage.py:管理类代码 task_test.py:简单测试代码
task_manage.py #coding=utf-8 import threading import logging import time # 多任务多线程任务管理类 class task_manage(): # name 任务名称 # task_func 任务函数指针 # task_args 任务函数参数,默认空 # check_func 任务是否执行完检测函数指针,返回True表示还有任务没有执行,默认调用自身的runtimes_control函数 # check_args 任务检测函数指针参数,默认空 # max_thread_count 最大线程数 # run_time 任务运行次数,设置check_func后,该参数无效 def __init__(self,name,task_func,task_args=(),check_func=None,check_args=(),max_thread_count=1,run_time=1): self._is_finished = False self._task_func = task_func self._task_args = task_args self._max_thread_count = max_thread_count self._threads = [] self._name = name self._check_args = check_args self._run_time = run_time self._task_index = 0 if check_func is None: self._check_func = self.runtimes_control self._check_args = () else: self._check_func = check_func # 任务运行次数控制函数 def runtimes_control(self): if self._run_time > 0: self._run_time -= 1 return True return False # 清除已退出线程 def clear_exit_threads(self): for t in self._threads[:]: if not t.is_alive() : self._threads.remove(t) # 运行任务 def run(self): while(len(self._threads)<self._max_thread_count and not self._is_finished): if self._check_func(*self._check_args): t = threading.Thread(target=self._task_func,args=self._task_args) self._threads.append(t) t.setDaemon(True) t.start() self._task_index += 1 logging.debug("%s run %s" %(self._name,self._task_index)) else: self._is_finished = True break # 对外接口,检测是否所有任务都执行完成 def is_finish(self): self.clear_exit_threads() self.run() return self._is_finished and len(self._threads)==0 def run_task_until_all_finished(manages=[]): while True: all_finished = True for manage in manages: all_finished = manage.is_finish() and all_finished if all_finished : break time.sleep(1) logging.debug('all have finished!') task_test.py #coding=utf-8 from base.task_manage import * def watch_movie(move_name): print("I am watching movie %s now." %(move_name)) def listen_music(music_name): print("I am listening music %s now." %(music_name)) manages=[] manages.append( task_manage(name="watching movie",task_func=watch_movie,task_args=(u"捉妖记",),run_time=10,max_thread_count=3)) manages.append( task_manage(name="listening music",task_func=listen_music,task_args=(u"笨小孩",),run_time=10,max_thread_count=3)) run_task_until_all_finished(manages) print('all have finished!') quit() 运行结果: I am watching movie 捉妖记 now. I am watching movie 捉妖记 now. I am watching movie 捉妖记 now. I am listening music 笨小孩 now. I am listening music 笨小孩 now. I am listening music 笨小孩 now. I am watching movie 捉妖记 now. I am watching movie 捉妖记 now. I am watching movie 捉妖记 now. I am listening music 笨小孩 now. I am listening music 笨小孩 now. I am listening music 笨小孩 now. I am watching movie 捉妖记 now. I am watching movie 捉妖记 now. I am watching movie 捉妖记 now. I am listening music 笨小孩 now. I am listening music 笨小孩 now. I am listening music 笨小孩 now. I am watching movie 捉妖记 now. I am listening music 笨小孩 now. all have finished!
试试其它关键字
多任务
多线程
同语言下
.
比较两个图片的相似度
.
过urllib2获取带有中文参数的url内容
.
不下载获取远程图片的宽度和高度及文件大小
.
通过qrcode库生成二维码
.
通过httplib发送GET和POST请求
.
Django下解决小文件下载
.
遍历windows的所有窗口并输出窗口标题
.
根据窗口标题调用窗口
.
python 抓取搜狗指定公众号
.
pandas读取指定列
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
小原周
贡献的其它代码
(
2
)
.
字符串的操作
.
多任务多线程任务管理类
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3