什么是多进程?

简单的理解:单板上运行的一个程序就是一个进程。进程是操作系统分配资源的最小单位,不同的进程之间资源不共享,进程间通信需要使用特定的方式。python提供了自带的multiprocessing库,用于多线程场景。

线程的创建(函数式和对象式)

import multiprocessing
import time def worker(interval):
while True:
print("The time is {0}".format(time.ctime()))
time.sleep(interval) if __name__ == "__main__":
p = multiprocessing.Process(target = worker, args = (1,))
p.start()
p.join()
import multiprocessing
import time class ClockProcess(multiprocessing.Process):
def __init__(self, interval):
multiprocessing.Process.__init__(self)
self.interval = interval def run(self):
while True:
print("the time is {0}".format(time.ctime()))
time.sleep(self.interval) if __name__ == '__main__':
p = ClockProcess(1)
p.start()
p.join()

守护进程

如果将一个进程设置为守护进程,那么当主进程结束时,守护进程也自动结束。

import multiprocessing
import time class ClockProcess(multiprocessing.Process):
def __init__(self, interval):
multiprocessing.Process.__init__(self)
self.interval = interval def run(self):
while True:
print("the time is {0}".format(time.ctime()))
time.sleep(self.interval) if __name__ == '__main__':
p = ClockProcess(1)
p.daemon = True # 设置子进程为守护进程后,看不到子进程的任何打印
p.start()
print("main process end")

如果想主进程等待子进程结束后,使用join即可

进程间通信

互斥锁

import multiprocessing

def one_task(lock, f):
with lock: # 技巧:使用with后自动获取锁和自动释放锁
fs = open(f, 'a+')
n = 10
while n > 1:
fs.write("one_task write\n")
n -= 1
fs.close() def two_task(lock, f):
lock.acquire()
try:
fs = open(f, 'a+')
n = 10
while n > 1:
fs.write("two task write\n")
n -= 1
fs.close()
finally:
lock.release() if __name__ == "__main__":
lock = multiprocessing.Lock()
f = "file.txt"
one = multiprocessing.Process(target = one_task, args = (lock, f))
two = multiprocessing.Process(target = two_task, args = (lock, f))
one.start()
two.start()
one.join()
two.join()

消息队列

import multiprocessing
import time def writer_proc(q):
while True:
q.put("message")
time.sleep(1) def reader_proc(q):
while True:
print(q.get()) if __name__ == "__main__":
q = multiprocessing.Queue()
writer = multiprocessing.Process(target = writer_proc, args = (q,))
writer.start() reader = multiprocessing.Process(target = reader_proc, args = (q,))
reader.start() reader.join()
writer.join()

python多进程之multiprocessing的更多相关文章

  1. Python多进程之multiprocessing模块和进程池的实现

    1.利用multiprocessing可以在主进程中创建子进程,提升效率,下面是multiprocessing创建进程的简单例子,和多线程的使用非常相似 ''' 代码是由主进程里面的主线程从上到下执行 ...

  2. 多进程之multiprocessing模块和进程池的实现

    转载:https://www.cnblogs.com/xiaobeibei26/p/6484849.html Python多进程之multiprocessing模块和进程池的实现 1.利用multip ...

  3. python并发编程之multiprocessing进程(二)

    python的multiprocessing模块是用来创建多进程的,下面对multiprocessing总结一下使用记录. 系列文章 python并发编程之threading线程(一) python并 ...

  4. 多进程之multiprocessing模块、守护进程、互斥锁

    目录 1. multiprocessing 模块介绍 2. Process类的介绍 3. Process类的使用 4. 守护进程 5. 进程同步(锁) 1. multiprocessing 模块介绍 ...

  5. 进程之multiprocessing

    进程的状态:

  6. python多进程之Process

    由于fork创建进程不能在windows系统上使用,所以产生了multiprocessing.Process Process可以直接实例化然后用start调用,需要指定新的进程执行的函数,用元组的方式 ...

  7. 进程之multiprocessing模块代码篇

    这里再把之前的内容总结和补充一下: 并发和并行: 你在干坏事,来了一个电话,干完坏事再去接电话,说明你既不是并发也不是并行. 你在干坏事,来了一个电话,你接完电话接着干坏事,说明你支持并发 你在干坏事 ...

  8. python多进程之IPC机制以及生产者消费者模型

    1.进程间通信(IPC机制) 第一种:管道 import subprocessres=subprocess.Popen('dir',shell=True, stdout=subprocess.PIPE ...

  9. Python 多进程编程之multiprocessing--Process

    Python 多进程编程之multiprocessing 1,Process 跨平台的进程创建模块(multiprocessing), 支持跨平台:windowx/linux 创建和启动      创 ...

随机推荐

  1. Python Selenium百度搜索翻页查找文字

    #!/usr/bin/python # -*- coding: utf- -*- from selenium import webdriver import time # browser = webd ...

  2. JVM之HotSpot虚拟机是如何发起内存回收的?

    1.背景 在上一节中,我们掌握了垃圾收集的一些算法,也弄明白了分代回收的原理, 那么HotSpot虚拟机是如何发起内存回收的? 2.如何找到GC Roots根节点(枚举根节点) 从可达性分析中GC R ...

  3. 算法题解:最小的K个数(海量数据Top K问题)

    [本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 题目 输入 n ...

  4. [ 头皮发麻 A1 ] 队内赛3 2020 Ateneo de Manila University DISCS PrO HS Division

    都是英语阅读题 但是本菜鸡就过了一题,直接自闭mmp明天开始起床一版题 传送门 B.Riana and the Blind Date 0是闰年?惊了 后来才知道整除被除数可以为0 闰年的计算方法 \( ...

  5. DNS区域传输和DNS字典爆破

    nslookup命令是已知域名的的解析记录下进行的查询.打个比方,已知sina.com这个域名有www.sina.com这条主机解析记录,就可以查询www.sina.com对应的ip以及其他相关信息. ...

  6. Python表达式与生成式

    Python表达式与生成式 前言 本章节中的所有知识点均为在不丧失代码可读性的前提下最大程度精简代码的一系列操作.其中涉及到一些性能问题(微乎其微)可以不做考虑. 三元表达式 三元表达式中有三个重要的 ...

  7. 2020_06_18Mysql事务

    1.事务的基本介绍 1.概念:一个包含多个步骤的事务,被事务管理,要么同时成功,要么同时失败. 2.操作: 2.1 开启事务:start transaction; 2.2 回滚:rollback; 2 ...

  8. MyEclipse 选中属性或方法后 相同的不变色

    myeclipse-->windows-->java-->Editor-->content Assist-->Mark Occurrencmyeclipse-->w ...

  9. Oracle 存储过程中的临时表数据自动清空

    问题叙述: 用 EXECUTE IMMEDIATE 动态往临时表插入数据,跟踪发现插入临时表后数据会立马清空,按理说等存储过程执行完才会清空临时表才对,现在是执行插入语句后下一步验证就发现临时表就没有 ...

  10. Pycharm连接MySQL后出现不出现数据库或表,出现其他文件的问题

    在使用pycharm连接MySQL,配置完成,测试连接通过之后,还是不能显示数据库中的表,出现了许多像armscii8_bin.armscii8_general_ci和ascii_bin等的文件. 解 ...