热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python多进程编程实例_Python编程:multiprocessing多进程(代码实例)

获取进程idimportmultiprocessingimportosdeffoo():print(__name__)print(parent:,os.getppid())pr

获取进程id

import multiprocessing

import os

def foo():

print(__name__)

print("parent:", os.getppid())

print("current:", os.getpid())

if __name__ == "__main__":

foo() # 主进程调用

p = multiprocessing.Process(target=foo)

p.start() # 新开进程调用

"""

__main__

parent: 952

current: 188

__mp_main__

parent: 188

current: 6492

"""

多进程测试

import multiprocessing

import time, threading

from pycharm_fontcolor import Colors, FontColor

def func(i):

print(FontColor.set_color("线程号:{}".format(threading.get_ident()), Colors.green), i)

def foo(i):

print(FontColor.set_color("进程:", Colors.red), i)

t = threading.Thread(target=func, args=(i,)) # 进程中新开线程

t.start()

if __name__ == "__main__":

start_time = time.time()

for i in range(5):

p = multiprocessing.Process(target=foo, args=(i,))

p.start()

end_time = time.time()

print(FontColor.set_color("时间:", Colors.blue), end_time - start_time)

"""

时间: 0.05303597450256348

进程: 0

线程号:8968 0

进程: 1

线程号:7620 1

进程: 2

进程: 3

线程号:9204 2

线程号:2492 3

进程: 4

线程号:6512 4

"""

进程池

from multiprocessing import Pool

import time, os

def foo(i):

time.sleep(2)

print("process:", i, os.getpid())

return i + 1 # 参数将传递给回调函数

def bar(i): # 做回调函数,由主进程执行

print("bar", i, os.getpid())

if __name__ == "__main__":

print(os.getpid())

pool = Pool(processes=3) # 允许同时放入3个进程

for i in range(10):

# p = pool.apply(func=foo, args=(i,)) # 串行

p = pool.apply_async(func=foo, args=(i,), callback=bar) # 并行

print("done")

pool.close() # 先关闭入口

pool.join() # 在等待执行

"""

8120

done

process: 0 5452

bar 1 8120

process: 1 8360

bar 2 8120

process: 2 7908

bar 3 8120

process: 3 5452

bar 4 8120

process: 4 8360

bar 5 8120

process: 5 7908

bar 6 8120

process: 6 5452

bar 7 8120

process: 7 8360

bar 8 8120

process: 8 7908

bar 9 8120

process: 9 5452

bar 10 8120

"""

进程队列

from multiprocessing import Process, Queue

def foo(q):

q.put("你好")

if __name__ == "__main__":

q = Queue() # 进程队列

p = Process(target=foo, args=(q,))

# p = Thread(target=foo, args=(q,))

p.start()

print(q.get()) # 你好

进程管道

from multiprocessing import Process, Pipe

def foo(conn):

conn.send("hello")

conn.close()

if __name__ == "__main__":

parent_conn, child_conn = Pipe() # 管道传送数据

p = Process(target=foo, args=(child_conn,))

p.start()

print(parent_conn.recv()) # hello

多进程实现数据共享

from multiprocessing import Process, Manager

import os

def foo(dct, lst):

dct[os.getpid()] = os.getpid()

lst.append(os.getpid())

print(os.getpid())

if __name__ == "__main__":

manager = Manager() # 实现进程间共享数据

dct = manager.dict()

lst = manager.list()

processes = []

for i in range(5):

p = Process(target=foo, args=(dct, lst))

p.start()

processes.append(p)

for process in processes: # 等待结果

process.join()

print(dct)

print(lst)

"""

3816 5376 7500 8332 1124

{3816: 3816, 5376: 5376, 8332: 8332, 7500: 7500, 1124: 1124}

[3816, 5376, 7500, 8332, 1124]

"""

进程锁

from multiprocessing import Lock, Process

def foo(lock, i):

lock.acquire()

print("hello world!", i)

lock.release()

if __name__ == "__main__": # 主动执行会继续下面的内容,被当做模块调用则不会

lock = Lock() # 实例化进程锁

for i in range(5):

p = Process(target=foo, args=(lock, i))

p.start()

"""

hello world! 2

hello world! 1

hello world! 0

hello world! 3

hello world! 4

"""



推荐阅读
  • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
  • 很多时候在注册一些比较重要的帐号,或者使用一些比较重要的接口的时候,需要使用到随机字符串,为了方便,我们设计这个脚本需要注意 ... [详细]
  • 本文介绍了使用Python根据字典中的值进行排序的方法,并给出了实验结果。通过将字典转化为记录项,可以按照字典中的值进行排序操作。实验结果显示,按照值进行排序后的记录项为[('b', 2), ('a', 3)]。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
  • 从批量eml文件中提取附件的Python代码实现方法
    本文介绍了使用Python代码从批量eml文件中提取附件的实现方法,包括获取eml附件信息、递归文件夹下所有文件、创建目的文件夹等步骤。通过该方法可以方便地提取eml文件中的附件,并保存到指定的文件夹中。 ... [详细]
  • 【爬虫训练场】:分页爬虫案例设计Demo,Python Flask与MySQL的完美连接
    网站类应用,一定离不开MySQL,所以本案例将带着大家学习一下,通过Flask调用MySQL数据,并实现分页呈现。类被称作蓝图,它是一个存储操作方法的容器,Flask可以通过Blu ... [详细]
  • 我正在尝试使用scrapycrallsingle运行完美运行的scrapy蜘蛛,但我无法在python脚本中运行它.主要问题是从不执行SingleBlogSpider.parse方 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • 人脸检测 pyqt+opencv+dlib
    一、实验目标绘制PyQT界面,调用摄像头显示人脸信息。在界面中,用户通过点击不同的按键可以实现多种功能:打开和关闭摄像头, ... [详细]
  • Pylance有哪些特性
    这篇文章给大家分享的是有关Pylance有哪些特性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Pylance安装和其他VSC ... [详细]
author-avatar
云思逸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有