我正在使用扩展功能的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
方法:
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。谁能帮助我理解为什么我在这两种环境下会得到不同的行为?我将不胜感激,因为这意味着其他人可能会在不同的计算机上使用该软件。