作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 concurrent.futures 模块运行多线程的 python 3.8 脚本,并且在 MacOS Catalina(英特尔)中运行良好。迁移到 MacOS Monterey(Apple Silicon)后。由于使用单线程,python代码运行时间长。我正在使用 Anaconda 附带的 python,它是 x86_64 并在 Rosetta 2 下运行。尝试了 python 3.9(来自 Anaconda)并得到了相同的结果。如果有人可以提供解决方案或解决方法,我将不胜感激。谢谢。
这是显示问题的测试代码。在旧机器上,它运行 2 轮并在 10 秒内完成。在新机器上,它运行 10 发并在 50 秒内完成。
import concurrent.futures
import time
pstart = time.time()
tasks = list(range(1,11))
def sleep_5s(task):
time.sleep(5)
print(f'Task {task} start at: {time.time()}')
def sleep_together(tasks):
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
for i,task in zip(tasks, executor.map(sleep_5s, tasks)):
pass
sleep_together(tasks)
print('Total run time', time.time()-pstart, 'seconds.')
更新:
最佳答案
您的代码在 macOS Big Sur 上按预期运行,它已经是 Apple Silicon,使用原生 Python 3.9。
看起来罪魁祸首是 Rosetta 或 Monterey 而不是您的代码,但是在 Rosetta 上使用 Swift 时我确实看到了一些奇怪的错误。你考虑过那样看吗?
关于Python 多线程在 MacOS Monterey/Apple Silicon 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69763169/
我是一名优秀的程序员,十分优秀!