部分來自
from: https://www.xncoding.com/2016/05/26/python/pycharm-remote.html
你是否經常要在Windows 7或MAC OS X上面開發Python或Web應用程序,但是它們最后需要在linux上面來運行呢? 我們經常會碰到開發時沒有問題但是到了正式的Linux環境下面卻出現問題。那么怎樣保證開發環境跟運行環境的一致呢?
通常有兩種方法解決。一種是使用PyCharm內置支持的Vagrant
,這個教程可以參考Vagrant開發環境配置。 不過很遺憾的是我自己在試驗過程中啟動VirtualBox虛擬機時候老是報錯,暫時還沒解決,讀者可以自己試着測試看行不行。 第二種方式就是通過PyCharm的遠程解釋器加上文件同步功能,實現本地編輯代碼->同步到服務器->通過遠程debug來調試測試程序。目前我選擇的是第二種,雖然比第一種更笨拙點。
遠程調試的功能在Eclipse、IntelliJ IDEA等大型IDE中均有支持,實現原理都基本相同,這里采用PyCharm進行說明。
遠程服務器的同步配置
遠程服務器IP地址192.168.203.95,開啟ssh服務,安裝python版本2.7。我用一個在PyCharm里面的core-python項目來做演示。
首先我們需要配置PyCharm通服務器的代碼同步,打開Tools | Deployment | Configuration
點擊左邊的“+”添加一個部署配置,輸入名字,類型選SFTP
確定之后,再配置遠程服務器的ip、端口、用戶名和密碼。root path是文件上傳的根目錄,注意這個目錄必須用戶名有權限創建文件。
然后配置映射,local path是你的工程目錄,就是需要將本地這個目錄同步到服務器上面,我填的是項目根目錄。 Deploy path on server 這里填寫相對於root path的目錄,下面那個web path不用管先
如果你還有一些文件或文件夾不想同步,那么在配置對話框的第三個tab頁“Excluded path”里面添加即可,可同時指定本地和遠程。
還有一個設置,打開Tools | Deployment | Options,將”Create Empty directories”打上勾,要是指定的文件夾不存在,會自動創建。
上傳和下載文件
有幾種方法可以實現本地和遠程文件的同步,手動和當文件保存后自動觸發。這里我選擇了手動,因為自動觸發比如影響性能,PyCharm會卡,感覺不爽。
手動上傳方式很簡單,選擇需要同步的文件或文件夾,然后選擇 Tools | Deployment | Upload to sftp(這個是剛剛配置的部署名稱)
下載文件也是一樣,選擇 Tools | Deployment | Download from sftp
比較遠程和本地文件
有時候你並不確定遠程和本地版本的完全一致,需要去比較看看。PyCharm提供了對比視圖來為你解決這個問題。
選擇Tools | Deployment | Browse Remote Host,打開遠程文件視圖,在右側窗口就能看到遠程主機中的文件
選擇一個你想要對比的文件夾,點擊右鍵->Sync with Local,打開同步對比窗口,使用左右箭頭來同步內容。
上面是服務器與本地對比,那么本地文件通服務器對比,就先在PyCharm里面選擇文件或文件夾,然后右鍵->Deployment->Sync with deployed to即可
PyCharm遠程調試
在PyCharm中進行遠程調試有兩種選擇:
- 使用遠程的解釋器
- 使用Python調試服務器
這里簡單起見我只演示第一種,使用遠程解釋器,也就是使用服務器上面安裝的python解釋器。
配置遠程Python解釋器
選擇File | Settings,選擇Project | Project Interpreter,然后在右邊,點擊那個小齒輪設置,如下
然后點擊”Add Remote”,填寫主機的ssh配置
如果之前配置過SFTP的話就直接選“Deployment configuration”,然后選擇剛剛的模板名稱就可以了,由於我上面配置過就直接選模板, 這里請仔細看我的Python解釋器是虛擬環境virtualenv,這個要在服務器上面先創建好虛擬環境。
開始調試
完成之后選擇這個遠程的解釋器作為工程的解釋器即可,然后配置一個運行實例,打斷點調試。 這里我以另外一個django工程為例來說明,名字為zspace,因為用一個web工程來說明更具代表性。
選擇“Run/Debug Configuration”,添加一個“Django server”,然后配置像下面這樣寫
請注意圖中標出的幾個點,具體什么意思就不用多解釋了吧,^_^
然后你就可以像本地調試一樣打斷點做調試了。這個步驟太簡單就不截圖了,記得修改源碼后同步到服務器繼續下一次的調試。
pycharm 調試celery
kafka message 傳給celery worker 之后,message變成了一個字典,message.value不能使用,只能使用message["value"].
ref: https://stackoverflow.com/questions/29312809/how-do-i-enable-remote-celery-debugging-in-pycharm/48868014#48868014
https://stackoverflow.com/questions/37150910/how-can-i-use-pycharm-to-locally-debug-a-celery-worker
celery 啟動:
celery -A <app_name> worker -c 3 -l INFO # 啟動3個worker,3個進程
celery -A <app_name> worker -l INFO -P gevent -c 1000 # 使用gevent啟動,worker一個,gevent並發數1000,只有一個進程
celery -A <app_name> multi start 2 -l INFO -P gevent -c 1000 -Q <queue_name> # 啟動2個gevent worker,每一個具有1000並發度,消費<queue_name>制定的隊列
celery -A <app_name> multi start 4 -l INFO -P gevent -c:1-3 1000 -c:4 200 -Q:1-2 myQueue1 -Q:3 myQueue2 -Q:4 myQueue3 # 啟動4個gevent worker,1-4具有1000並發度,4具有200並發度,1-2消費隊列myQueue1, 3消費隊列myQueue2,4消費隊列myQueue3.
僅僅遠程調試的配置信息:
ref: https://stackoverflow.com/questions/28690211/celery-gevent-pool-hangs-after-1000-tasks-execution