Python使用multiprocessing.Process无输出的原因及解决方法
现有多进程代码的问题
- 缺失
multiprocessing模块导入:代码中直接调用multiprocessing.Process但没有导入对应模块,运行首先会触发命名错误 - 仅创建进程对象未启动:
Process实例生成后必须调用start()方法才会真正启动子进程执行目标逻辑,你当前只是创建了对象,没有触发运行 - 主进程未等待子进程执行就直接退出:主进程循环创建完所有进程对象后就直接结束了,Python主进程退出时会强制终止所有未完成的子进程,
disallow函数还没来得及执行就被杀死,自然没有输出
修正后的完整可运行代码
import sys, urllib, multiprocessing from urllib.request import urlopen, Request def disallow(line): if "Disallow" in line: print(line.replace("Disallow: ", "")) def parse_robot_txt(url): url += "robots.txt" req = Request(url, data=None, headers={"User-Agent": "Mozilla/5.0"},) robots = urlopen(req).read().decode("UTF-8") lines = str(robots).splitlines() processes = [] for l in lines: p = multiprocessing.Process(target=disallow, args=(l,)) p.start() processes.append(p) # 阻塞主进程,等待所有子进程执行完成 for p in processes: p.join() if __name__ == "__main__": parse_robot_txt("https://moz.com/")
注:当前场景仅为简单字符串匹配逻辑,使用多进程反而会带来额外的进程调度开销,实际生产不需要用多进程实现该需求,以上仅为符合你要求的多进程正确实现版本。
内容的提问来源于stack exchange,提问作者PaliProx
相关产品推荐
相关产品推荐

