日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python多進程程序打包成exe的問題_python

作者:野生大蝦 ? 更新時間: 2023-01-30 編程語言

粘貼一下部分的多進程代碼

if __name__ == '__main__':
    """"流程模擬"""
    multiprocessing.freeze_support() # 打包成exe時,需要該語句,防止系統無限創建子線程
    print(f"{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())} - [主進程] - 程序已啟動")
    if WORKERS > 0:
        print(f"{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())} - [主進程] - 當前為并發爬取,每次采集{WORKERS}條url")
    else:
        print(f"{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())} - [主進程] - 當前為單線程爬取,時間間隔為{INTERVAL}秒")

    init_data_queue = multiprocessing.Queue()       # 從數據庫里取出來的需要爬取的url等信息
    result_data_queue = multiprocessing.Queue()     # 爬取的結果
    wait_to_insert_queue = multiprocessing.Queue()  # 等待寫入數據庫的數據 已經去重 符合insert的格式要求

    p1 = multiprocessing.Process(target=get_remote_data, args=(init_data_queue, wait_to_insert_queue), name='[數據庫交互進程]')
    p2 = multiprocessing.Process(target=scrapy_wechat, args=(init_data_queue, result_data_queue), name='[爬蟲進程]')
    p3 = multiprocessing.Process(target=make_data, args=(result_data_queue, wait_to_insert_queue), name='[數據處理進程]')
    try:
        p1.start()
        p2.start()
        p3.start()
    except Exception as e:
        print(f"{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())} - [主進程] - 錯誤信息: {e}")

程序打包成exe文件后,啟動時會瘋狂創建子進程,程序來回在if WORKERS > 0:這行代碼中執行,即無法正常工作,還會導致電腦逐漸卡死。解決的辦法為:在程序入口前,加入multiprocessing.freeze_support()即可解決此事。值得注意的時,該語必須寫在if __name__ == "__main__"的下一句,如果沒有main語句,也會出錯。

原文鏈接:https://www.cnblogs.com/mooremok/p/16930929.html

欄目分類
最近更新