我正在开发一个使用多处理的有点广泛的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。有人能帮我理解为什么我在这两个环境中会有不同的行为吗?我很感激,因为这是其他人可能在不同机器上使用的软件
目前没有回答
相关问题 更多 >
编程相关推荐