python - 多处理数组 .get_lock 可在一台计算机上运行,但不能在另一台计算机上运行
问题描述
我正在开发一个使用多处理的有点广泛的 python 程序。因为我希望用户在运行程序时在控制台上看到一些进展,所以我阅读了有关在 stackoverflow 上使用共享计数器的信息,并且在玩了一会儿我的代码之后,我让它工作了。正如我所说,这里发布的代码太多,但要点是我在name==main line
,之后实例化了一个多处理数组
if __name__ == "__main__":
total_progress_counter = Array('i',[0,0])
然后在代码的主要部分中,我将此数组传递给其他模块中的函数:
some_name.plot(<other variables>,
total_progress_counter=total_progress_counter)
然后在另一个函数中,我使用了.get_lock
我在stackoverflow上找到的方法:
with total_progress_counter.get_lock():
total_progress_counter[0] += self.total_panels_to_plot
total_progress_counter[1]
我还在同一函数中更新了另一个组件。这在我编写代码的工作机器上运行良好,并且该机器具有 Centos 操作系统。
但是,当我在我的个人 MacBook 上运行它时,它会给出以下回溯:
Traceback (most recent call last):
File "./program.py", line 775, in <module>
program.run()
File "./program.py", line 177, in run
cases_plotted = pool.map(self.__plot__, all_cases)
File "/opt/anaconda3/lib/python3.8/multiprocessing/pool.py", line 364, in map
return self._map_async(func, iterable, mapstar, chunksize).get()
File "/opt/anaconda3/lib/python3.8/multiprocessing/pool.py", line 771, in get
raise self._value
AttributeError: 'list' object has no attribute 'get_lock'
我的个人机器上有 python3 版本 3.8.3,我的工作机器上有 python3 版本 3.7.4。谁能帮我理解为什么我在这两种环境中会出现不同的行为?我将不胜感激,因为这是其他人可能在不同机器上使用的软件。
解决方案
推荐阅读
- arm - 在 STM32F4 上使用 rfft 函数时 FFT 结果错误
- python - Python 的简单临时文件系统
- javascript - document.querySelector() 不起作用
- validation - 如何验证查询而不在 PowerBuilder 中执行
- code-coverage - 代码覆盖率:用于 Apache Storm 拓扑的代码覆盖率工具
- python - 调用带有可选参数的函数
- ssis - 将 SharePoint 2016 列表导出到 SQL Server 2016 数据库
- angularjs - 如何将编辑的 ng 重复数据推送到另一个数组 onclick 复选框
- php - Symfony 3 在 EntityType 表单字段中获取对象数据
- ios - 在 UITableViewCell 的不同类之间切换