补全:每个线程自己的一份
threading.local() 给每个线程一份独立的存储。补全:每个线程把自己的名字存进 local,再从 local 读回来放进结果。
阅读更多 →
补全:加锁的计数器
两个线程各把共享计数器加 1000 次。补全 worker:每次加之前拿锁、加完放锁(用 with)。
阅读更多 →
两个线程往一个列表里放
两个线程各往同一个共享列表里放 1000 项,主线程等完数一数: import threading shared = [] def work(): for i in range(1000)
阅读更多 →
进程之间为什么互不影响
两个进程各自算一份账,一个进程写坏了自己的内存崩掉了,另一个毫无察觉。因为【0】。
阅读更多 →
线程各自独有的东西
同一个进程的线程也有各自独有的部分。每个线程自己一份、别的线程碰不到的是【0】。
阅读更多 →
线程之间共享的东西
同一个进程的两个线程,一个把全局列表 done 加了一项,另一个立刻能看到。因为【0】。
阅读更多 →
补全:开一次用很多次
(成本模型:开一个进程 100 格(要给它独立的内存和资源表),开一个线程 10 格(只要一个栈和一个编号)。) 8 个任务不一定要 8 个工人:开 2 个线程轮流做。补全 pool_cost(tas
阅读更多 →
补全:开线程收结果
补全:开 5 个线程,每个把自己的编号平方后放进共享列表(加锁),主线程等完再按顺序打印。
阅读更多 →
补全:按需求选便宜的
(成本模型:开一个进程 100 格(要给它独立的内存和资源表),开一个线程 10 格(只要一个栈和一个编号)。) 补全 cost(n, isolate):需要隔离就只能开进程,否则开线程;交回总成本。
阅读更多 →
真开五十个线程
真开 50 个线程,每个只做一件小事就结束。看做完之后完成计数和还活着的线程数: import threading done = [] lock = threading.Lock() def wo
阅读更多 →