Python之路——并行编程之multiprocessing模块

Process

 1 import socket
 2 import time
 3 from multiprocessing import Process
 4
 5 def talk(conn):
 6     if type(conn)==socket.socket():
 7         conn.send(b‘connected‘)
 8         msg = conn.recv(1024)
 9         print(msg)
10         conn.close()
11
12
13 if __name__ == ‘__main__‘:
14     sk = socket.socket()
15     sk.bind((‘127.0.0.1‘,8080))
16     sk.listen()
17     while True:
18         conn,addr = sk.accept()
19         print(addr,time.ctime())
20         p = Process(target=talk,args=(conn,))
21         p.start()
22
23     sk.close()

Lock

 1 # from multiprocessing import Lock
 2 # lock = Lock()
 3 # lock.acquire()  # 需要锁,拿钥匙
 4 # lock.acquire()  # 需要锁,阻塞
 5 # lock.release()  # 释放锁,还钥匙
 6
 7 # 锁 就是在并发编程中,保证数据安全
 8
 9 # 多进程 实现并发
10
11 import json
12 import time
13 import random
14 from multiprocessing import Lock
15 from multiprocessing import Process
16
17 # with open(‘ticket‘,‘w‘) as f:
18 #     json.dump({‘count‘:20},f)
19
20
21 def search(i):
22     with open(‘ticket‘) as f:
23         print(i,json.load(f)[‘count‘])
24 def get(i):
25     with open(‘ticket‘) as f:
26         ticket_num = json.load(f)[‘count‘]
27     time.sleep(random.random())
28     if ticket_num>0:
29         with open(‘ticket‘,‘w‘) as f:
30             json.dump({‘count‘:ticket_num-1},f)
31         print(‘%s买到票了‘%i)
32     else:
33         print(‘%s没票了‘%i)
34 def task(i,lock):
35     search(i)
36     lock.acquire()
37     get(i)
38     lock.release()
39 if __name__ == ‘__main__‘:
40     pass
41
42     lock = Lock()
43     for i in range(20):
44         p = Process(target=task,args=(i,lock))
45         p.start()

Semaphore

 1 # from multiprocessing import Semaphore
 2 # sem = Semaphore(4)
 3 # sem.acquire()
 4 # print(0)
 5 # sem.acquire()
 6 # print(1)
 7 # sem.acquire()
 8 # print(2)
 9 # sem.acquire()
10 # print(3)
11 # sem.release()
12 # sem.acquire()
13 # print(4)
14
15 import time
16 import random
17 from multiprocessing import Semaphore
18 from multiprocessing import Process
19
20 def sing(i,sem):
21     sem.acquire()
22     print(‘%s : 进入ktv‘%i)
23     time.sleep(random.randint(1,3))
24     print(‘%s :出ktv‘%i)
25     sem.release()
26
27 if __name__ == ‘__main__‘:
28     sem = Semaphore(4)
29     for i in range(20):
30         Process(target=sing,args=(i,sem)).start()

守护进程

 1 # start 开启一个进程
 2 # join 用join可以让主进程等待子进程结束
 3
 4 # 守护进程
 5 # 守护进程会随着主进程的代码执行结束而结束
 6 # 正常的子进程没有执行完的时候主进程要一直等着
 7
 8 # import time
 9 # from multiprocessing import Process
10 # def func():
11 #     print(‘--‘*10)
12 #     time.sleep(15)
13 #     print(‘--‘*10)
14 #
15 # def cal_time():
16 #     while True:
17 #         time.sleep(1)
18 #         print(‘过去了1秒‘)
19 #
20 # if __name__ == ‘__main__‘:
21 #     p = Process(target=cal_time)
22 #     p.daemon = True
23 #     p.start()
24 #     p2 = Process(target=func)
25 #     p2.start()
26 #     for i in range(100):
27 #         time.sleep(0.1)
28 #         print(‘*‘*i)
29 #     p2.join()
30 # 守护进程的作用:
31 #   会随着主进程的代码执行结束而结束,不会等待其他子进程
32 # 守护进程 要再start之前设置
33 # 守护进程中,不能再开启子进程
34
35
36 # is_alive  # 进程是否还活着,True代表进程还在, False代表进程不在了
37 # terminate #结束一个进程,但是这个进程不会立刻被杀死
38
39 # import time
40 # from multiprocessing import Process
41 # def func():
42 #     print(‘wahaha‘)
43 #     time.sleep(5)
44 #     print(‘qqxing‘)
45 # if __name__ == ‘__main__‘:
46 #     p = Process(target=func)
47 #     p.start()
48 #     print(p.is_alive())
49 #     time.sleep(0.1)
50 #     p.terminate()
51 #     print(p.is_alive())
52 #     time.sleep(1)
53 #     print(p.is_alive())
54
55 # 进程的其他属性
56 # pid 查看这个进程的进程id
57 # name 查看进程的名字,可以修改
58 # import time
59 # from multiprocessing import Process
60 # def func():
61 #     print(‘wahaha‘)
62 #     time.sleep(5)
63 #     print(‘qqxing‘)
64 # if __name__ == ‘__main__‘:
65 #     p = Process(target=func)
66 #     p.start()
67 #     print(p.name,p.pid)
68 #     p.name = ‘WAHAHAHA‘
69 #     print(p.name)

Event

 1 import time
 2 import random
 3 from multiprocessing import Process
 4 from multiprocessing import Event
 5
 6 # e = Event() # 实例化一个事件  标志/交通信号灯
 7 # e.set()     # 将标志变成非阻塞/交通灯变绿
 8 # e.wait()    # 刚实例化出来的一个事件对象,默认的信号是阻塞信号/默认是红灯
 9 #             # 执行到wait,要先看灯,绿灯行红灯停,如果在停的过程中灯绿了,
10 #             # 就变成非阻塞了
11 # e.clear()   # 将标志又变成阻塞/交通灯变红
12 #
13 # e.is_set() # 是否阻塞 True就是绿灯 False就是红灯
14
15 def traffic_light(e):
16     while True:
17         if e.is_set():  # 是否阻塞,True就是绿灯,False就是红灯
18             e.clear()
19             print(‘红灯亮‘)
20             time.sleep(3)
21         else:
22             e.set()
23             print(‘绿灯亮‘)
24             time.sleep(3)
25
26 def car(name,e):
27     e.wait()
28     print(‘%s 通过‘%name)
29
30 if __name__ == ‘__main__‘:
31     e = Event()
32     Process(target=traffic_light,args=(e,)).start()
33     for i in range(50):
34         if i%random.randint(1,5)==0:
35             time.sleep(random.randint(1,3))
36         p = Process(target=car,args=(i,e))
37         p.start()

原文地址:https://www.cnblogs.com/liuyankui163/p/8416957.html

时间: 2024-10-09 00:33:24

Python之路——并行编程之multiprocessing模块的相关文章

python之路--网络编程之socket

我们使用qq.微信和别人聊天,通过浏览器来浏览页面.看京东的网站,通过优酷.快播(此处只是怀念一下)看片片啥的等等,通过无线打印机来打印一个word文档等,只要有无线.有网.有4G,我们就能好好的聊天,好好的看片片.好好的购物什么的,对吧,那么这些操作都叫做网络通信,确切来说都需要使用网络通信,前提是你要有网(大家记着这个'网',我下面会给大家详解),原来生活中处处使用了网络通信,我们通过网络通信的不同形式:比如说qq是我们下载到电脑或者手机上的应用程序(qq应用程序就是人家腾讯开发的软件,放到

.Net并行编程之二:并行循环

本篇内容主要包括: 1.能够转化为并行循环的条件 2.并行For循环的用法:Parallel.For 3.并行ForEach的用法Parallel.ForEach 4.并行LINQ(PLINQ)的用法AsParallel() 5.并行中断与并行停止的用法与区别 6.外部控制循环取消的方法(Break,Stop) 7.处理循环体中抛出的异常 8.小循环体的分区并行方法:Parallel.ForEach 9.最大并行度的控制,Parallel.For,Parallel.ForEach 10.在循环体

Python进程之multiprocessing模块

python的multiprocessing模块是跨平台的多进程模块,multiprocessing具有创建子进程,进程间通信,队列,事件,锁等功能,multiprocessing模块包含Process,Queue,Pipe,Lock等多个组件. 1.Process 创建进程的类 Process([group [, target [, name [, args [, kwargs]]]]]) 参数介绍:group参数未使用,值始终为Nonetarget表示调用对象,即子进程要执行的任务args表

python 开启进程两种方法 multiprocessing模块 介绍

一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu\_count\(\)查看),在python中大部分情况需要使用多进程. Python提供了multiprocessing. multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似. multiprocessing模块的功能众多:支持子进程.通信和共享数据.执行不同形式的同步,

Python之路(第二十篇) subprocess模块

一.subprocess模块 subprocess英文意思:子进程 那什么是进程呢? (一)关于进程的相关理论基础知识 进程是对正在运行程序的一个抽象,进程的概念起源于操作系统,是操作系统最核心的概念,操作系统的其他所有内容都是围绕进程的概念展开的. 所以想要真正了解进程,必须事先了解操作系统. 程序员无法把所有的硬件操作细节都了解到,管理这些硬件并且加以优化使用是非常繁琐的工作,这个繁琐的工作就是操作系统来干的,有了他,程序员就从这些繁琐的工作中解脱了出来,只需要考虑自己的应用软件的编写就可以

C++ 并行编程之memory_order

一.如果只是简单地解决在多线程中对共享资源的读写并发问题,只需要用C++以下内容: 线程类 thread, 原子数据类模板 atomic<T> t, 互斥 mutex, 锁 lock, 条件变量 condition_variables. 二.在此基础上,如果想在并行编程中获得更好的性能,尤其当使用的是一些弱内存顺序的平台(比如PowerPC)的话,设定原子操作间的内存顺序则很有必要. C++11 加入了支持并行编程的原子操作模块,而所有的原子操作都有一个参数 memory_order. 1.内

[python] 专题八.多线程编程之thread和threading

就个人而言,学了这么多年的课程又写了这么多年的程序,虽然没有涉及到企业级的项目,但还是体会到了有几个知识点是非常重要的,包括:面向对象的思想.如何架构一个项目.设计模式来具体解决问题.应用机器学习和深度学习的方法,当然也包括我这篇文章的内容--多线程和并行化处理数据. 这篇文章主要是参考Wesley J. Chun的<Python核心编程(第二版)>书籍多线程部分,并结合我以前的一些实例进行简单分析.尤其是在大数据.Hadoop\Spark.分布式开发流行的今天,这些基础同样很重要.希望对你有

进程之multiprocessing模块代码篇

这里再把之前的内容总结和补充一下: 并发和并行: 你在干坏事,来了一个电话,干完坏事再去接电话,说明你既不是并发也不是并行. 你在干坏事,来了一个电话,你接完电话接着干坏事,说明你支持并发 你在干坏事,来了一个电话,你边接电话边干坏事,说明你支持并行 同步和异步: 同步:要想执行下一步 必须等待上一步执行完 异步:想要调用一个函数 只需要通知就行了 不需要等待结果就可以继续执行其他代码 下面简单的来一段代码如何让服务端实现并发的效果 #服务端 import socketfrom multipro

Python的并发并行[3] -&gt; 进程 -&gt; subprocess 模块

subprocess 模块 0 模块描述 / Module Description From subprocess module: """Subprocesses with accessible I/O streams This module allows you to spawn processes, connect to their input/output/error pipes, and obtain their return codes. For a complet