对优雅这个词敏感的话,请忽略
import time
import random
from threading import Thread
stop = False
threads_num = 20
todos = list(range(1000))
total = len(todos)
def test(name):
while todos:
todo = todos.pop()
# print('{}获取到 todo-{}'.format(name, todo))
sleep_time = random.randint(1, 5) / 10
# print('{}休息{}秒'.format(name, sleep_time))
time.sleep(sleep_time)
if stop:
print('{}收到结束信号正在处理'.format(name))
break
print('{}结束'.format(name))
if __name__ == '__main__':
start_time = time.time()
# 启动线程
threads = []
for i in range(threads_num):
t = Thread(target = test, args = ('线程-{}'.format(i),))
threads.append(t)
t.start()
# 响应 ctrl+c
try:
while todos:
print('已完成{}中的{},还剩余{}'.format(total, total - len(todos), len(todos)))
time.sleep(1)
except KeyboardInterrupt as e:
print('收到结束信号,正在处理')
stop = True
# 确认所有子线程结束
for t in threads:
t.join()
print('所有子线程已结束')
print('执行清理工作...')
print('共计用时{}秒'.format(time.time() - start_time))
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.