正在尝试运行下面的代码。但是,我无法使用join()方法将结果合并到一个字典中。它只是一直在无限期地运行。不确定是我做错了什么,还是某个库还没有针对我的MacBook硅片进行优化。
import random
import time
import multiprocessing as mp
import math
start_time = time.time()
probs = {"cats":0.10,"dogs": 0.80, "bats": 0.10}
calculations = 10000
processors = 8
def f(how_many_times, times):
for i in range(how_many_times):
rand_num = random.random()
total = 0
for animal, prob in probs.items():
total += prob
if total > rand_num:
times[animal] += 1
break
if __name__ == '__main__':
start_time = time.time()
manager = mp.Manager()
total_times = manager.dict()
pool = mp.Pool(processors)
calculations_per_processor = math.floor(calculations/processors)
for i in range(processors):
job = pool.apply_async(f, args=(calculations_per_processor, total_times))
pool.close()
pool.join()
print("--- %s seconds ---" % (time.time() - start_time))强制退出后,代码给出以下报告:
---------------------------------------------------------------------------
KeyboardInterrupt Traceback (most recent call last)
<ipython-input-3-890e4966932e> in <module>
10
11 pool.close()
---> 12 pool.join()
13
14 print("--- %s seconds ---" % (time.time() - start_time))
/opt/anaconda3/lib/python3.8/multiprocessing/pool.py in join(self)
660 elif self._state not in (CLOSE, TERMINATE):
661 raise ValueError("In unknown state")
--> 662 self._worker_handler.join()
663 self._task_handler.join()
664 self._result_handler.join()
/opt/anaconda3/lib/python3.8/threading.py in join(self, timeout)
1009
1010 if timeout is None:
-> 1011 self._wait_for_tstate_lock()
1012 else:
1013 # the behavior of a negative timeout isn't documented, but
/opt/anaconda3/lib/python3.8/threading.py in _wait_for_tstate_lock(self, block, timeout)
1025 if lock is None: # already determined that the C code is done
1026 assert self._is_stopped
-> 1027 elif lock.acquire(block, timeout):
1028 lock.release()
1029 self._stop()
KeyboardInterrupt: 发布于 2020-12-20 05:55:37
此问题仅出现在Jupyter笔记本电脑中。在终端中运行代码时,join()方法没有问题。不确定如何修复笔记本电脑。我已经尝试卸载anaconda并使用pip3重新安装notebook。但是没有成功
https://stackoverflow.com/questions/65365010
复制相似问题