少了一项

👁️ 3 人浏览 💬 0 人评论 ❤️ 添加收藏

(每道题开头都有同一段:六个来源 SOURCES,每项是 (名字, 要等的秒数, 字节数);fetch(name, wait, size) 睡 wait 秒后交回 size——「等」的时候别人能干活。)

(这一节的 fetch 多了一条:来源是「天气」时会抛 ValueError——线程里的异常怎么处理,就看它。)

work 自己 try/except:成功放 ("好", 名字),失败放 ("错", 名字)。看几好几错、错的是谁:

import threading, time

SOURCES = [("首页", 0.05, 1200), ("新闻", 0.08, 3400), ("图片", 0.03, 8800), ("视频", 0.10, 20000), ("论坛", 0.06, 2600), ("天气", 0.02, 300)]

def fetch(name, wait, size):
    time.sleep(wait)
    if name == "天气":
        raise ValueError("来源挂了:" + name)
    return size

results = []
lock = threading.Lock()

def work(name, wait, size):
    try:
        r = fetch(name, wait, size)
        item = ("好", name)
    except ValueError:
        item = ("错", name)
    with lock:
        results.append(item)

ts = [threading.Thread(target=work, args=s) for s in SOURCES]
for t in ts:
    t.start()
for t in ts:
    t.join()
good = sorted(n for k, n in results if k == "好")
bad = sorted(n for k, n in results if k == "错")
print(str(len(good)) + "/" + str(len(bad)) + "/" + ",".join(bad))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论