1. 程式人生 > >使用gevent.monkey.patch_all() 協程池遇到阻塞,在任務中新增一個sleep()搞定~

使用gevent.monkey.patch_all() 協程池遇到阻塞,在任務中新增一個sleep()搞定~

關於使用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