python python為何多執行緒無法切換

2022-05-17 23:21:26 字數 676 閱讀 6477

寫了乙個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 python為何多執行緒無法切換

寫了乙個kafka傳輸訊息,celery發布任務的指令碼。有四個執行緒,分別讀取不同的kafka佇列資訊 問題是,只有第乙個執行緒會啟動,剩下的三個執行緒連start都執行不了。而且這個問題不是一開始就發生的,最開始跑 的時候很正常。連續執行了半個月都沒問題。就是後來重啟後就有問題了。後來發現,在每...

為何那麼多女人不想嫁人

為何那麼多女人不想嫁人?為何我不願意嫁給你?你叫我給你乙個理由,是的,我有理由。理由是 結了婚,我不再是情人,也不再重要,我只是乙個黃臉婆。我不願意被冷落。理由是 結了婚,我的地位遠遠落後你家的每乙個人,我再也得不到關愛的眼神。理由是 結了婚,所有親友的問候語就會變成 什麼時候生小孩啊?我不要生小孩...

電信「悅me」為何命途多舛?

古人作戰有句名言叫 一鼓作氣,再而衰,三而竭 意思是打仗必須 一氣呵成 才能發揮最大實力,取得最好的戰績。所謂商場如戰場,經商也是如此,最近,中國電信悅me盒子再次推遲上市時間,在引發大家一片熱議的同時,其前途更令人擔憂,三番五次的推遲不僅可能會讓產品失去最佳上市時機,也會令消費者失去耐心。10月2...