Python 易错笔记
Python 常用的库里有多种队列的实现,multiprocessing.Queue、 asyncio.Queue、以及单独的Queue.queue。multiprocessing.Queue和Queue.queue是比较接近的,都是多线程安全的,支持多个消费者和制造者。asyncio.Queue 不是多线程安全的,是为异步模式设计的,不支持多消费者,多制造者。
Python 里的某些三方库会启动多个子进程,直接关闭脚本,那些子进程可能并没有直接结束,这时如果需要可以在任务管理器里面手动结束子进程。或者使用taskkill /IM pythonw.exe /F 命令结束全部名为pythonw.exe 的进程。如果是在自己的脚本里使用了mutlprocessing 里创建了子进程,并在子进程里引用了第三方库,很可能导致你的子进程代码运行完了,但是子进程仍然是alive 的。为保险起见,可以在子进程里发送一个信号给父进程,让父进程强制结束子进程。
使用Matplotlib 绘图时,如果调用plt.show(block=False) ,而不调用plt.pause(0.3),Python 会继续执行plt.show 后面的代码,但是不会显示绘制的曲线,绘图窗口也会失去响应。这不是bug,是被设计成这样工作的。按官方文档,当调用plt.show(block=False)时,需要在后面的代码中调用matplotlib 的event_loop。其实在后面的循环代码里加上一行plt.pause(0.3)就好了。这表示运行0.3秒matplotlib的事件循环函数,在其中处理用户的输入,比如缩放、关闭移动等。