使用gevent.monkey.patch_all() 協程池遇到阻塞,在任務中新增一個sleep()搞定~
阿新 • • 發佈:2018-11-06
關於使用gevent.monkey.patch_all()協程池遇到阻塞解決辦法:
import time
...
class Example:
...
time.sleep(0.000001)
在進行多執行緒時monkey會阻塞住執行緒的繼續執行,需要對monkey.patch_all進行處理, 在例項中新增一個sleep()可以解決,這裡時間可以設定一個非常小的數就可以了~
import gevent.monkey gevent.monkey.patch_all() ...... class Example: ...... def run(self): # 實現做主要邏輯 # 1. 準備url self.get_url_list() # 2. 遍歷傳送請求,獲取響應 for i in range(5): # 設定併發數為5 self.pool.apply_async(self._execute_request_content_save, callback=self._callback) while True: time.sleep(0.0000001) if self.total_response_num >= self.total_request_num: self.is_running = False break
對於這個問題可以訪問stackoverflow具體看一下:
https://stackoverflow.com/questions/9192539/using-gevent-monkey-patching-with-threading-makes-thread-work-serially