wd-smebiz/utils/task_utils.py

46 lines
1.3 KiB
Python

import time
from concurrent.futures import ThreadPoolExecutor
from queue import Queue
from threading import Thread
class TaskManage:
# 考虑使用celery
def __init__(self, task_process_works=5, task_method=print, max_task=None):
self.task_process_works = task_process_works
self.task_method = task_method
self.q: Queue = Queue(max_task) if max_task else Queue()
def task_func(self, params):
return self.task_method(params)
def add_task(self, params):
self.q.put(params)
def add_task_list(self, params_list):
for params in params_list:
self.q.put(params)
def task_thread(self):
with ThreadPoolExecutor(max_workers=self.task_process_works) as executor:
while True:
params = self.q.get()
executor.submit(self.task_func, params)
def start_task_thread(self):
Thread(target=self.task_thread).start()
def do_test():
class MyTask(TaskManage):
def task_func(self, params):
time.sleep(params['sleep'])
print(params['text'])
task_manage = MyTask()
task_manage.start_task_thread()
task_manage.add_task_list(
[{'sleep': 1, 'text': 1}, {'sleep': 1, 'text': 2}, {'sleep': 1, 'text': 3}, {'sleep': 2, 'text': 222}])
while True:
time.sleep(1)