分享

python数据结构:多线程数据处理,优先级队列--Queue

 Python集中营 2022-10-10 发布于甘肃

前言

与其他的编程语言数据结构相似,python同样提供了关于队列的支持,提供了'先进先出’的数据处理方式这样的设计可以支持更多的算法业务的实现。在处理数据对象时可以被调用方进行锁定,因此更好的支撑多线程业务的实现。

Queue():先进先出

 1'''
2Queue():先进先出
3'''

4import queue
5
6queue_ = queue.Queue()
7
8# 向队列写入数据
9
10for i in range(1,5):
11
12    queue_.put(i)
13
14# 从队列中取出数据
15
16print("Queue():先进先出")
17
18while not queue_.empty():
19
20    print(queue_.get())

LifoQueue():先进后出

 1'''
2LifoQueue():先进后出
3'''

4import queue
5
6queue_ = queue.LifoQueue()
7
8# 向队列写入数据
9
10for i in range(1,5):
11
12    queue_.put(i)
13
14# 从队列中取出数据
15
16print("LifoQueue():先进后出")
17
18while not queue_.empty():
19
20    print(queue_.get())

PriorityQueue():优先级

在操作系统中,我们常常会根据优先级来处理任务,比如系统的优先级最高,我们肯定优先处理系统任务,然后才处理用户的任务。同样,queue库给我们提供了PriorityQueue来处理优先级的队列。

 1'''
2PriorityQueue():优先级
3'''

4import queue
5
6# 多线程扩展
7
8import threading
9
10# 设定一个处理任务
11
12class Task:
13
14    # 初始化数据对象
15
16    def __init__(self, priority, desc):
17
18        self.priority = priority
19
20        self.desc = desc
21
22        print("创建任务:", desc)
23
24        return
25
26    def __eq__(self, other):
27
28        try:
29
30            return self.priority == other.priority
31
32        except AttributeError:
33
34            return NotImplemented
35
36    def __lt__(self, other):
37
38        try:
39
40            return self.priority > other.priority
41
42        except AttributeError:
43
44            return NotImplemented
45
46# 处理任务
47
48def run_Task(queue_):
49
50    while True:
51
52        next_ = queue_.get()
53
54        print(next_.desc)
55
56        queue_.task_done()
57
58# 创建优先级队列
59
60queue_ = queue.PriorityQueue()
61
62# 向优先级队列中添加任务
63
64queue_.put(Task(6"任务6"))
65
66queue_.put(Task(10"任务10"))
67
68queue_.put(Task(2"任务2"))
69
70# 创建线程数组
71
72threads = [
73
74    threading.Thread(target=run_Task, args=(queue_,)),
75
76    threading.Thread(target=run_Task, args=(queue_,)),
77
78]
79
80# 启动线程
81
82for thread in threads:
83
84    thread.setDaemon(True)
85
86    thread.start()
87
88# 守护/等待
89
90queue_.join()

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多