什么是多进程?

简单的理解:单板上运行的一个程序就是一个进程。进程是操作系统分配资源的最小单位,不同的进程之间资源不共享,进程间通信需要使用特定的方式。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. vue通过属性绑定为元素绑定style行内样式

    1.直接在元素上通过:style绑定书写             <h1 :style="{color: 'red','font-size': '40px'}">这是一 ...

  2. 谈谈java中的并发(一)

    一.并发的定义 并发:对于这个概念一直就是没怎么搞懂,就是感觉特别的生疏,(自己从从字面上理解就是多个东西,一起出发),所以就上网上查了一些资料: 同时拥有两个或多个线程,如果程序在单核处理器上运行, ...

  3. Python3使用cookielib模块

    同时使用过python2和python3的应该都知道,好多模块在python2中能直接安装,但是到了python3中却无法安装直接使用,同样python3中的好些模块在python2中也是一样 如下: ...

  4. easymock笔记2

    EasyMock主要是为测试提供模拟数据,比如你可以模拟HttpServletRequest. EasyMock 可以mock interface和抽象java 类,但是不可以mock拥有被final ...

  5. 入门大数据---Kylin是什么?

    一.Kylin是什么? Apache Kylin是一个开源的.分布式的分析型数据仓库,提供Hadoop/Spark 上的SQL查询接口及多维度分析(OLAP)能力以支持超大规模的数据,最初由eBay开 ...

  6. Illegal reflective access by org.apache.hadoop.security.authentication.util.KerberosUtil

    在使用Java API操作HBase时抛出如下异常: Illegal reflective access by org.apache.hadoop.security.authentication.ut ...

  7. C++ Primer Plus(四)

    完整阅读C++ Primer Plus 系统重新学习C++语言部分,记录重要但易被忽略的,关键但易被遗忘的. 友元.异常和其他 1.抛出异常类时,虽然catch的是一个引用,但是也会产生一次拷贝,因为 ...

  8. List<List<Object>> list = new ArrayList<List<Object>>(); 求回答补充问题 list.get(position).add(Object);为什么会报错啊我想在对应的list里面添加对象

    public static void main(String[] args){ List<List<Object>> list = new ArrayList<List& ...

  9. 同一WpfApplication下简单的页面转换

    别人写的很不错的Dome...分享学习下 源文件地址 : http://pan.baidu.com/share/link?shareid=1698564707&uk=3912660076

  10. JavaScript图形实例:Koch曲线

    Koch曲线的构造过程是:取一条长度为L0的直线段,将其三等分,保留两端的线段,将中间的一段改换成夹角为60度的两个等长直线:再将长度为L0/3的4个直线段分别进行三等分,并将它们中间的一段均改换成夹 ...