python 多线程进度条-python 等待线程结束
1.1 microthread (tasklet, green thread, greenlet) 1.2 collections module deque
Deque(双向队列)是栈和队列的通用实现。 Deque是“双端队列”的缩写; deque支持线程安全的,在deque的两端有效的内存插入和删除,性能大约为O(1) 元素python 多线程进度条,虽然list也支持类似的操作,但是主要针对定长操作进行了优化,所以有O(n ) 在 pop(0) 和 insert(0,v) 上(这将改变数据的位置和大小)时间复杂度。
方法
阐明
附加()
从右边添加元素(同列表)
追加左()
从左边添加元素
延长()
从右边开始逐一添加可迭代对象(同list)
向左延伸()
从左往右逐个添加可迭代对象
流行音乐()
从列表中移除一个元素(默认最右边的元素),并返回该元素的值(同list),如果没有元素,会报IndexError
左旋()
移除列表中的一个元素(默认最左边的元素),并返回该元素的值,如果没有元素会报IndexError
数数()
统计队列中的元素个数(同list)
插入(索引,对象)
在指定位置插入一个元素(同list)
旋转(n)
rotate(n),从右边开始反转n步,如果n为负数,从左边开始反转
清除()
删除双端队列中的所有元素,最终长度为0
消除()
删除第一次出现的元素,如果未找到则引发 ValueError
最大长度
只读属性,最大长度受deque限制,如果没有则返回None。 当一个有限长度的双端队列添加超过限制数量的项目时,另一端的项目将被自动删除。
此外python 多线程进度条,deque还通过in操作符支持迭代、序列化、len(d)、reversed(d)、copy.copy(d)、copy.deepcopy(d)、成员测试和下标索引。
1.3 微线程示例
from collections import deque
def range_1():
for n in range(5):
print(f"I'm range_1, {n}")
yield
def range_2():
for n in range(10):
print(f"I'm range_2, {n}")
yield
def range_3():
for n in range(15):
print(f"I'm range_3, {n}")
yield
if __name__ == '__main__':
task_queue = deque()
task_queue.append(range_1())
task_queue.append(range_2())
task_queue.append(range_3())
while task_queue:
task = task_queue.pop() # 获取下一个任务
try:
# 运行它直到下一条yield和enqueue语句
next(task)
task_queue.appendleft(task)
except StopIteration:
# 任务完成
pass