46 lines
1.3 KiB
Python
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)
|