os.fork

该方法仅支持Linux/Unix

 1 import os
 2
 3 print('Current Process %s start ...' % os.getpid())
 4 pid = os.fork()  #复制主进程以生成一个子进程
 5 if pid < 0:
 6     print('error in fork ')
 7 elif pid == 0:
 8     print('I am child process %s and my parent process is %s' % (os.getpid(), os.getppid()))
 9 else:
10     print('I %s created a child process %s' % (os.getppid(), os.getpid()))

multiprocessing

进程池 pool

 1 from multiprocessing import Pool
 2 import os, time, random
 3
 4 def run_task(name):
 5     print('Task %s (pid = %s) is running...' % (name, os.getpid()))
 6     time.sleep(random.random() * 3)
 7     print('Task %s end.' % name)
 8
 9 if __name__ == '__main__':
10     print('Curret process %s.' % os.getpid())
11     p = Pool(processes = 3)  # 创建进程池
12     for i in range(5):
13         p.apply_async(run_task, args = (i, ))  # 启动进程
14     print('Waiting for all subprocesses done...')
15     p.close()
16     p.join()
17     print('All subprocesses done.')

进程间通信

Queue

 1 from multiprocessing import Queue, Process
 2 import os, time, random
 3
 4 def proc_write(q, urls):
 5     print('Process (%s) is writig...' % os.getpid())
 6     for url in urls:
 7         q.put(url) # 往队列中添加
 8         print('Put %s to queue...' % url)
 9         time.sleep(random.random())
10
11 def proc_read(q):
12     print('Process (%s) is writig...' % os.getpid())
13     while True:
14         url = q.get(True)  # 从队列中取出
15         print('Get %s from queue.' % url)
16
17 if __name__ == '__main__':
18     q = Queue()  # 创建消息队列
19     # 创建进程
20     proc_writer1 = Process(target = proc_write, args = (q, ['url_1', 'url_2', 'url_3', 'url_4']))
21     proc_writer2 = Process(target = proc_write, args = (q, ['url_5', 'url_6', 'url_7', 'url_8']))
22     proc_reader = Process(target = proc_read, args = (q, ))
23     # 启动进程,往消息队列中添加
24     proc_writer1.start()
25     proc_writer2.start()
26     # 启动读queue进程
27     proc_reader.start()
28     # 等待proc_writer结束
29     proc_writer1.join()
30     proc_writer2.join()
31     # 由于proc_reader 进程里是死循环,这里强行终止
32     proc_reader.terminate()

Pipe

 1 import multiprocessing, random, os, time
 2
 3 def proc_send(pipe, urls):
 4     for url in urls:
 5         print('Process %s send: %s ' % (os.getpid(), url))
 6         pipe.send(url)  # 发送 url
 7         time.sleep(random.random())
 8
 9 def proc_recv(pipe):
10     while True:
11         print('Process %s rev: %s' % (os.getpid(), pipe.recv()))
12         time.sleep(random.random())
13
14 if __name__ == '__main__':
15     pipe = multiprocessing.Pipe()
16     p1 = multiprocessing.Process(target = proc_send, args = (pipe[0], ['url_' + str(i) for i in range(10)]))
17     p2 = multiprocessing.Process(target = proc_recv, args = (pipe[1], ))
18     p1.start()
19     p2.start()
20     p1.join()
21     p2.terminate()

代码摘自 《Python爬虫开发与项目实战》-- 范伟辉

转载于:https://www.cnblogs.com/loayi/p/8991877.html

学习笔记--Python多进程相关推荐

  1. python语言的33个保留字的基本含义_Python学习笔记——Python的33个保留字及其意义,python,pythone33,含义...

    Python学习笔记--Python的33个保留字及其意义,python,pythone33,含义 发表时间:2020-03-27 笔记走起 正文 序号 保留字 含义 1 and 用于表达式运算,逻辑 ...

  2. Python学习笔记--Python字符串连接方法总结

    声明: 这些总结的学习笔记,一部分是自己在工作学习中总结,一部分是收集网络中的知识点总结而成的,但不到原文链接.如果有侵权,请知会,多谢. python中有很多字符串连接方式,总结一下: 1)最原始的 ...

  3. 树莓派学习笔记——Python SQLite插入温度记录

    0 前言 本文使用python向SQLite数据库中插入树莓派温度数据,SQLite数据库中包含一张只包含三个字段的记录表--参数名称,时间和温度值.本文重点解释Python操作SQlite的具体方法 ...

  4. 全志H616学习笔记------Python

    要求:不用深究,用C语言的视角学习,会改就行 Python是一种动态解释型语言.Python可以在Windows.UNIX.MAC等多种操作系统上使用,也可以在java..NET开发平台上使用. 特点 ...

  5. 学习笔记:Python 面试100讲(基于Python3.x)05-python综合题

    01-read.readline.readlines区别 一 如何打开和读取文本内容 二 使用open函数打开文件,并返回一个IO对象,该对象有3个用于读取文件的方法, 分别为read.readlin ...

  6. python编程语法-Python学习笔记(Ⅰ)——Python程序结构与基础语法

    作为微软的粉丝,最后终于向Python低头了,拖了两三个月终于下定决心学习Python了.不过由于之前受到C/C#等语言影响的思维定式,前期有些东西理解起来还是很费了些功夫的. 零.先抄书: 1.Py ...

  7. Python学习笔记(Ⅰ)——Python程序结构与基础语法

    作为微软的粉丝,最后终于向Python低头了,拖了两三个月终于下定决心学习Python了.不过由于之前受到C/C#等语言影响的思维定式,前期有些东西理解起来还是很费了些功夫的. 零.先抄书: 1.Py ...

  8. [学习笔记]python

    一些屁话 对于学习,我觉得要带有目的的去学,这样效率才会提高,我学一样技能肯定是要去完成一件事,不然我学习了干什么呢,学编程语言也是一样,我个人学习python的初衷是看到一些大神写的爬虫,当时就觉得 ...

  9. python程序运行键_python学习笔记-python程序运行

    小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...

最新文章

  1. DataSet导出Excel,比以往的方法导出的Excel外观更加好看
  2. 哈哈,这个小游戏很有意思!
  3. 程序员——[小鸟语录]
  4. Oracle日期操作函数
  5. 设计模式-(8)外观(swift版)
  6. 如何突破大众点评接口风控?
  7. PIE工程师是做什么的
  8. 业务安全漏洞挖掘归纳总结
  9. maya阿诺德渲染失败_[转载]Arnold 渲染器for maya 安装不了的解决办法
  10. DVB-S/S2天线及信号相关知识
  11. 星空粒子登录页面 jsp
  12. 笔记本外接2K显示器问题记录(集显Intel HD Graphic 3000)
  13. PyPDF2读取PDF文件内容保存到本地TXT
  14. 解决Windows11打不开Windowsdefender(安全中心)
  15. 冰河公开了常逛的23大学习网站,赶快收藏
  16. ADAMoeacle预言机竞争优势|支持广域网节点喂价|节点挖ADAM
  17. 看不懂!苏宁控股“卖身”淘宝,“盲盒第一股”市值破千亿,超过苏宁易购
  18. Linux配置ntp时间同步服务器(全)No association ID's returned
  19. EndNote文献悬挂缩进的设置方法及设置参考文献序号后面空格长度
  20. 对于技术岗位来说,开发岗累还是算法岗累, 我们一起来聊聊

热门文章

  1. day18【前台】订单
  2. 第 6 章 工厂模式
  3. mysql 联表比对,MySQL联表查询详解/超详细mysql left join,right join,inner join用法分析比较...
  4. mysql event同步数据库_mysql 数据库Event定时任务使用详解(Navicat 及直接SQL语句创建)...
  5. 华为交换机重制_华为交换机重置命令
  6. php5框架,Thinkphp5.1框架
  7. gateway配置mysql_使用Gateway配置路由以及动态路由
  8. 你不可不知道的React生命周期
  9. python爬虫酷狗_python爬虫教程:爬取酷狗音乐,零基础小白也能爬取哦
  10. python中run函数作用_Python run()函数和start()函数的比较和差别介绍