首页
视频
留言
友链
推荐
Github
常用工具
低端影视
Search
1
go-canal 订阅和消费 binlog
121 阅读
2
Go语言精进之路-白明
71 阅读
3
测试用
32 阅读
4
Docker 小记
32 阅读
5
Python | multiprocessing | 简单使用
29 阅读
All
Golang
Python
Docker
Daily
ReadingMinutes
go语言精进之路
Database
登录
/
注册
Search
标签搜索
go
database
binlog
multiprocessing
clickhouse
MrSnake
累计撰写
11
篇文章
累计收到
4
条评论
首页
栏目
All
Golang
Python
Docker
Daily
ReadingMinutes
go语言精进之路
Database
页面
视频
留言
友链
推荐
Github
常用工具
低端影视
搜索到
1
篇与
multiprocessing
的结果
2022-01-09
Python | multiprocessing | 简单使用
Pool对象 进程池对象,提供一种快捷的方法,将输入数据分配给不同进程处理。使用进程池的方式快捷的进行一个多进程操作import time from multiprocessing import Process, Pipe, Pool def start(x): return x*x*x if __name__ == '__main__': with Pool(5) as p: # 创建一个大小为5的进程池 print(p.map(start,[i for i in range(4)])) # map方法,可以将第二参数的值传到第一个参数中,也就是函数中 Process类 创建对象,再用start()生成进程,与多线程类似。也可以用重载run()的方式自定义多进程简单的例子import time from multiprocessing import Process def example(name): print("l am a {}".format(name)) time.sleep(2) print('end') if __name__ == '__main__': # with Pool(5) as p: # 创建一个大小为5的进程池 # print(p.map(start,[i for i in range(4)])) # map方法,可以将第二参数的值传到第一个参数中,也就是函数中 print("mainProcess") process1 = Process(target=example, args=("snake",)) process2 = Process(target=example, args=("tom",)) # process1.daemon = process2.daemon = True # 如何只剩下守护进程程序退出 process1.start() process2.start() ------------------------------------------------------------------- mainProcess l am a tom l am a snake end end自定义,等同于上面class Start(Process): def __init__(self,name): Process.__init__(self) self.name = name def run(self): print("l am a {}".format(self.name)) time.sleep(2) print('end') if __name__ == '__main__': print("mainProcess") process1 = Process(target=example, args=("snake",)) process2 = Process(target=example, args=("tom",)) # process1.daemon = process2.daemon = True process1.start() process2.start()在进程之间交换对象队列 Queue类是一个近似queue.Queue的克隆from multiprocessing import Queue,Process def example2(q): q.put([38, "snake", 'hello']) if __name__ == '__main__': q = Queue() p = Process(target=example2, args=(q,)) p.start() print(q.get()) # prints "[38, "snake", 'hello']" p.join()管道 Pipe()函数返回一个由管道连接的连接对象,默认为双工,返回的两个对象表示Pipe()表示管道的两端,每个连接对象都send()和recv()方法。并且两个进程不能同时写入和读取同一端。from multiprocessing import Pipe,Process def customers(c): """管道交换对象""" c.send('l am a snake') c.close() if __name__ == '__main__': producer, customer = Pipe() process = Process(target=customers, args=(customer,)) process.start() print(producer.recv()) process.join()进程间同步(进程锁)确保一次只有一个进程打印到标准输出。from multiprocessing import Process, Lock def f(l, i): l.acquire() # 上锁确保一次只有一个进程访问 try: print('hello world', i) finally: l.release() if __name__ == '__main__': lock = Lock() l = [] for num in range(10): # 创建10个进程 p = Process(target=f, args=(lock, num)) l.append(p) p.start() for p in l: # 等待子进程结束 p.join()进程间共享状态共享内存使用Value或Array将数据存储在共享内存映射中
2022年01月09日
29 阅读
0 评论
0 点赞