zoukankan      html  css  js  c++  java
  • 【python】python为何多线程无法切换

    写了一个kafka传输消息,celery发布任务的脚本。

    有四个线程,分别读取不同的kafka队列信息

    问题是,只有第一个线程会启动,剩下的三个线程连start都运行不了。

    而且这个问题不是一开始就发生的,最开始跑代码的时候很正常。连续运行了半个月都没问题。就是后来重启后就有问题了。

    后来发现,在每个线程里面加sleep后,线程会切换了。但切换极慢,无法忍受。而且正常的threading根本不需要sleep就可以切换线程的。

    这期间的变化只有升级了celery相关的rabbitmq服务,但这个应该跟python多线程没什么关系吧。

    啊啊啊啊啊啊啊啊啊,要疯

    -------------------------------------------------------------------------------------

    更新: 问题原因找到了 多线程与gevent不能同时使用.......

    为了使用gevent的协程功能,需要monkey.patch_all()   但该函数会改变python底层的一些处理导致多线程无法使用

    具体场景:

    我的脚本a.py是多线程的,在开始时引用了b.py,而b.py在全局设置了monkey.patch_all()。

    解决方法:

    不要在b.py的全局设置monkey.patch_all(), 而是到具体需要使用gevent的函数中再设置。这样a.py引用b.py时就不会引用到monkey.patch_all()的设置了。

  • 相关阅读:
    《中小学生Python编程入门指南》1.1 什么是编程
    《中小学生Python编程入门指南》前言
    简单的番茄工作法倒计时(源码)
    关于AE
    Blender2.5快捷键
    关于Blender
    随意设置控件每一个角的倒角
    关于多个block问题
    UICollectionViewCell--查找cell上的按钮点击后,对应的是哪个cell
    UIMenuItem
  • 原文地址:https://www.cnblogs.com/dplearning/p/7698611.html
Copyright © 2011-2022 走看看