Python爬蟲開發與專案實戰--分散式程式
分散式的開發現在應該是炙手可熱。訊息佇列是實現分散式的一個方法。
Queue的整個使用過程
管理程式:
1) 建立佇列,宣告佇列中的元素個數
2) 定義佇列的回撥函式
3) 註冊佇列的回撥函式方法
4) 為QueueManager繫結地址及埠,設定authkey
5) 獲取佇列,入隊與出隊
任務程式:
1) 註冊用於獲取queue的方法名稱,任務程式只能通過名稱獲取在網路上獲取Queue
2) 根據ip,埠,authkey來連線伺服器
在windows中的程式碼如下:
taskManager.py
from queue import Queue
from multiprocessing.managers import BaseManager
from multiprocessing import freeze_support
task_number = 10
task_queue = Queue(task_number)
result_queue = Queue(task_number)
def get_task():
return task_queue
def get_result():
return result_queue
class QueueManager(BaseManager):
pass
def win_run():
QueueManager.register('get_task_queue',callable = get_task)
QueueManager.register('get_result_queue',callable=get_result)
manager = QueueManager(address=('127.0.0.1',8001),authkey=b'abc')
manager.start()
try:
task = manager.get_task_queue()
result = manager.get_result_queue()
for url in ['ImageUrl_'+str(i) for i in range(10)]:
print('put task %s ...'%url)
task.put(url)
print('try get result...')
for i in range(10):
print('result is %s'% result.get(timeout=10))
except:
print('Manager error')
finally:
manager.shutdown()
if __name__ == '__main__':
freeze_support()
win_run()
taskWorker.py
import time
from multiprocessing.managers import BaseManager
class QueueManager(BaseManager):
pass
QueueManager.register('get_task_queue')
QueueManager.register('get_result_queue')
server_addr='127.0.0.1'
print('Connect to server %s...' % server_addr)
m=QueueManager(address=(server_addr,8001),authkey=b'abc')
m.connect()
task=m.get_task_queue()
result=m.get_result_queue()
while(not task.empty()):
image_url = task.get(True,timeout=5)
print('run task download %s...'%image_url)
time.sleep(1)
result.put('%s---->success'%image_url)
print('worker exit.')
程式執行結果為:
注意點:
在建立QueueManager中如果authkey之後沒有加入b
報錯如下:
那麼也許,我們先要了解下在Python中字串前面b的意義
在python中,字串前面可能會出現:
1. U 後面為中文組成的字串
2. R 後面為普通字串,主要如轉義字元等問題,用在正規表示式,檔案絕對地址中
3. B python3 中預設的str為unicode,b代表為bytes,是python2中的str
所以,在報錯中,也看到提示沒有encoding的提示
知識點:
1.freeze_support作用:
百度中沒有看到,直接到官網中去檢視:
Add support for when a program which uses multiprocessing has been frozen to produce a Windows executable. (Has been tested with py2exe, PyInstaller and cx_Freeze.)
One needs to call this function straight after the if __name__ == '__main__' line of the main module. For example:
from multiprocessing import Process, freeze_support
def f():
print 'hello world!'
if __name__ == '__main__':
freeze_support()
Process(target=f).start()
If the freeze_support() line is omitted then trying to run the frozen executable will raise RuntimeError.
Calling freeze_support() has no effect when invoked on any operating system other than Windows. In addition, if the module is being run normally by the Python interpreter on Windows (the program has not been frozen), then freeze_support() has no effect.
來自 https://docs.python.org/2/library/multiprocessing.html
翻譯:
1)在windows下的多程式模式使用,如果Python直譯器已經正確的執行在windows中,該函式將沒有作用。
2)需要在main函式後面直接呼叫
2.pass作用
在python中pass是空語句,只是為了保持程式結構的完整性。
相關文章
- Python爬蟲開發與專案實戰pdfPython爬蟲
- Python爬蟲開發與專案實戰(2)Python爬蟲
- Python爬蟲開發與專案實戰(1)Python爬蟲
- Python爬蟲開發與專案實戰——基礎爬蟲分析Python爬蟲
- Python爬蟲開發與專案實戰 3: 初識爬蟲Python爬蟲
- python爬蟲實操專案_Python爬蟲開發與專案實戰 1.6 小結Python爬蟲
- [Python3網路爬蟲開發實戰] 分散式爬蟲原理Python爬蟲分散式
- Python爬蟲開發與專案實戰 1:回顧Python程式設計Python爬蟲程式設計
- 不踩坑的Python爬蟲:Python爬蟲開發與專案實戰,從爬蟲入門 PythonPython爬蟲
- Python爬蟲開發與專案實戰 4: HTML解析大法Python爬蟲HTML
- python書籍推薦-Python爬蟲開發與專案實戰Python爬蟲
- Python爬蟲開發與專案實戰 2:Web前端基礎Python爬蟲Web前端
- Python爬蟲開發與專案實踐(3)Python爬蟲
- 視訊教程-Python網路爬蟲開發與專案實戰-PythonPython爬蟲
- 《Python爬蟲開發與專案實戰》總結 第二章Python爬蟲
- Python大型網路爬蟲專案開發實戰(全套)Python爬蟲
- Python開發爬蟲專案+程式碼Python爬蟲
- 從0到1完成nutch分散式爬蟲專案實戰分散式爬蟲
- 完整的python專案例項-《Python爬蟲開發與專案實戰》pdf完整版Python爬蟲
- python爬蟲-33個Python爬蟲專案實戰(推薦)Python爬蟲
- Python網路爬蟲實戰專案大全 32個Python爬蟲專案demoPython爬蟲
- python專案開發例項-Python專案案例開發從入門到實戰——爬蟲、遊戲Python爬蟲遊戲
- python爬蟲實戰教程-Python爬蟲開發實戰教程(微課版)Python爬蟲
- 爬蟲專案實戰(一)爬蟲
- 爬蟲實戰專案集合爬蟲
- 爬蟲實戰專案合集爬蟲
- python3網路爬蟲開發實戰_Python3 爬蟲實戰Python爬蟲
- 第一個分散式爬蟲專案分散式爬蟲
- Python網路爬蟲實戰小專案Python爬蟲
- Python網路爬蟲實戰專案大全!Python爬蟲
- 2個月精通Python爬蟲——3大爬蟲框架+6場實戰+反爬蟲技巧+分散式爬蟲Python爬蟲框架分散式
- Java 爬蟲專案實戰之爬蟲簡介Java爬蟲
- Go語言專案實戰:併發爬蟲Go爬蟲
- 《python 爬蟲開發與實戰》html基礎詳解Python爬蟲HTML
- Python靜態網頁爬蟲專案實戰Python網頁爬蟲
- 《Python3網路爬蟲開發實戰》教程||爬蟲教程Python爬蟲
- Python 3網路爬蟲開發實戰Python爬蟲
- 精通 Python 網路爬蟲:核心技術、框架與專案實戰Python爬蟲框架