pyspider源碼-run.py

終于到了看,run.py的時候了.

這篇文章的目的僅僅是初步的了解pyspider,具體作者的寫法,為什么這樣寫,都不在討論的范圍之內(nèi).

我想如果可以的話,以后我也要跟著作者的思路,重新寫一遍pyspider.

read_config(ctx, param, value)

里面有一個underline_dict(d)方法.這個方法返回一個詞典,詞典key的'_'用'-'代替

return dict((k.replace('-', '_'), underline_dict(v)) for k, v in six.iteritems(d))

click會調(diào)用read_config,用來解析參數(shù).其實這里就是讀取了配置文件.

ctx是一個對象,<click.core.Context object at 0x7f8dc6a5be50>,應(yīng)該是只要通過click就會自動生成這樣的對象,具體的我也不了解.

connect_db(ctx, param, value)

讀取出來數(shù)據(jù)庫連接.進(jìn)行連接.這里作者的處理是直接在click接受參數(shù)的時候,直接創(chuàng)建連接

具體代碼暫時不分析.在libs文件夾下面

load_cls(ctx, param, value)

這個函數(shù)之前說過.

從另一個包中導(dǎo)入對象的屬性.這里的對象是廣義的對象,比如,包算一種對象,包里的方法,可以看作屬性.

這個方法主要用在啟動各個組件的時候.比如webui的flask對象,就是通過這個方法導(dǎo)入

connect_rpc

連接到rpc服務(wù).

fetcher和scheduler部分都有生成連接的代碼.具體功能應(yīng)該要到實現(xiàn)組件的代碼里面看

cli(ctx, **kwargs)

這是run的第一個函數(shù),也是入口函數(shù).
因為run的main函數(shù)為

def main():
    cli()

if __name__ == '__main__':
    main()

ctx是click上下文對象
**kwargs是click通過命令行接受的參數(shù)
這里主要建立以下連接

  • taskdb
  • projectdb
  • resultdb
  • data_path
  • newtask_queue
  • status_queue
  • scheduler2fetcher
  • fetcher2processor
  • processor2result

并且這些連接,全部存在kwargs之中,之后在把kwargs更新到ctx

  ctx.obj.update(kwargs)  #這里不確定click方法,其實查找click的api,也沒有找到ctx對應(yīng)的對象

之后執(zhí)行

ctx.invoke(all)

開始all方法.

all(ctx,fetcher_num,processor_num,result_worker_num, run_in)

all的代碼很短.特別容易看.

g = ctx.obj

第一步把之前創(chuàng)建的連接和對象賦值給g

之后講各個組建通過線程或者進(jìn)程的方式啟動起來.

#抽出一段fetcher的代碼,其他組件差不多
  fetcher_config = g.config.get('fetcher', {})
        fetcher_config.setdefault('xmlrpc_host', '127.0.0.1')
        for i in range(fetcher_num):
            threads.append(run_in(ctx.invoke, fetcher, **fetcher_config))

最后,當(dāng)所有的組件關(guān)閉的時候一次性關(guān)閉.

finally:
        # exit components run in threading
        for each in g.instances:
            each.quit()

        # exit components run in subprocess
        for each in threads:
            if not each.is_alive():
                continue
            if hasattr(each, 'terminate'):
                each.terminate()
            each.join()

然后就是各個組建部分的啟動了.

def scheduler(ctx,...)

參數(shù)太長了...
賦值給g.實例化scheduler對象.啟動調(diào)動器
'''
if xmlrpc:
utils.run_in_thread(scheduler.xmlrpc_run, port=xmlrpc_port, bind=xmlrpc_host)
'''
這里的一段代碼現(xiàn)在還不知道怎么回事

def fetcher(ctx, ...)

def phantomjs(ctx,...)

def bench(ctx,...)

def one(ctx,...)

def send_message(ctx, ...)

都差不多

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秋茫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌匾灶,老刑警劉巖替蛉,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夸盟,死亡現(xiàn)場離奇詭異,居然都是意外死亡暖释,警方通過查閱死者的電腦和手機戚炫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門剑刑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人双肤,你說我怎么就攤上這事施掏。” “怎么了杨伙?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵其监,是天一觀的道長。 經(jīng)常有香客問我限匣,道長抖苦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任米死,我火速辦了婚禮锌历,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘峦筒。我一直安慰自己究西,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布物喷。 她就那樣靜靜地躺著卤材,像睡著了一般。 火紅的嫁衣襯著肌膚如雪峦失。 梳的紋絲不亂的頭發(fā)上扇丛,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音尉辑,去河邊找鬼帆精。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的卓练。 我是一名探鬼主播隘蝎,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼襟企!你這毒婦竟也來了嘱么?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤顽悼,失蹤者是張志新(化名)和其女友劉穎拱撵,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體表蝙,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年乓旗,在試婚紗的時候發(fā)現(xiàn)自己被綠了府蛇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡屿愚,死狀恐怖汇跨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妆距,我是刑警寧澤穷遂,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站娱据,受9級特大地震影響蚪黑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜中剩,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一忌穿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧结啼,春花似錦掠剑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至属铁,卻和暖如春眠寿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背红选。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工澜公, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓坟乾,卻偏偏與公主長得像迹辐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子甚侣,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • RPC的服務(wù) RPC是指遠(yuǎn)程過程調(diào)用明吩,也就是說兩臺服務(wù)器A,B殷费,一個應(yīng)用部署在A服務(wù)器上印荔,想要調(diào)用B服務(wù)器上應(yīng)用提...
    comboo閱讀 267評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)详羡,斷路器仍律,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • 兩本不錯的書: 《Python參考手冊》:對Python各個標(biāo)準(zhǔn)模塊,特性介紹的比較詳細(xì)实柠。 《Python核心編程...
    靜熙老師哈哈哈閱讀 3,360評論 0 80
  • 今天兩位海星的領(lǐng)導(dǎo)之道完成水泉,和他們一起回家,一個說要戒煙并付諸行動窒盐,一個想戒煙草则,見賢思齊焉,見不賢而內(nèi)自省也蟹漓。晚上...
    徐曉琳111閱讀 99評論 0 0
  • 一個男人對于女生怎么樣才能算是紅顏炕横,互相傾盡所有事情這就算知己了嗎?有些人說紅顏知己當(dāng)然要長得漂亮能夠訴說心事的就...
    世傾簡艾閱讀 237評論 0 0