python多进程程序打包成exe的问题
野生大虾 人气:0粘贴一下部分的多进程代码
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语句,也会出错。
加载全部内容