python多进程(加入进程池)操作常见案例


Posted in Python onOctober 21, 2019

本文实例讲述了python多进程(加入进程池)操作。分享给大家供大家参考,具体如下:

一、多进程复制多个文件

import multiprocessing
import os
import time
# 复制文件,传入文件名
def copy_file(old_file_name, old_name):
  new_file_name = 'new_file'
  new_name = old_name
  if not os.path.exists(new_file_name):
    os.makedirs(new_file_name)
  with open(old_file_name + '/' + old_name, 'rb') as f:
    file_content = f.read()
  with open(new_file_name + '/' + new_name, 'wb') as f:
    f.write(file_content)
if __name__ == '__main__':
  old_file_name = 'old_file'
  name_list = os.listdir(old_file_name)
  time_old = time.time()
  for name in name_list:
    process = multiprocessing.Process(target=copy_file, args=(old_file_name, name))
    process.start()
  time_new = time.time()
  print('执行时间:%f' % (time_new - time_old))

二、优化加入进程池,并显示复制进度:

import multiprocessing
import os
import time
# 复制文件,传入文件名
def copy_file(old_file_name, old_name, queue):
  new_file_name = 'new_file'
  new_name = old_name
  if not os.path.exists(new_file_name):
    os.makedirs(new_file_name)
  with open(old_file_name + '/' + old_name, 'rb') as f:
    file_content = f.read()
  with open(new_file_name + '/' + new_name, 'wb') as f:
    f.write(file_content)
    queue.put(new_file_name)
if __name__ == '__main__':
  old_file_name = 'old_file' #存放文件的文件名
  name_list = os.listdir(old_file_name) #取出所有文件的文件名
  queue = multiprocessing.Manager().Queue() #创建队列对象,用于计算复制完成百分比
  po = multiprocessing.Pool(3) #创建线程池
  time_old = time.time() #用于计算花费时间
  for name in name_list:
    po.apply_async(copy_file, (old_file_name, name, queue))
  po.close()
  index = 0
  while True:
    index += 1
    queue.get()
    print('\r以保存%.2f%%' % ((index / len(name_list)) * 100), end='')
    if index == len(name_list):
      break
  time_new = time.time()
  print('执行时间:%f' % (time_new - time_old))

三、多进程聊天器:

import multiprocessing
import socket
import threading
# 需求:
# 1.主进程创建一个TCPconnect
# 2.主进程connect后创建进程开启一个新的Socketconnect
# 3.进程里创建线程不断的接收和提示发送消息
# 有连接时新创建一个进程处理聊天
def speak_send(tcp_msg):
  while True:
    test = input('请输入要发送的消息')
    tcp_msg.send(test.encode('utf-8'))
def speak_rec(tcp_msg):
  while True:
    print(tcp_msg.recv(1024).decode('gbk'))
# 开启的进程聊天
def speak_process(tcp_sock, tcp_msg, ip):
  print('开启进程')
  # 5.开线程循环接收消息
  msg_rec = threading.Thread(target=speak_rec, args=(tcp_msg,))
  # print(tcp_msg.recv(1024).decode('gbk'))
  # 6.开线程循环发送消息
  msg_send = threading.Thread(target=speak_send, args=(tcp_msg,))
  msg_rec.start()
  msg_send.start()
  msg_rec.join()
  msg_send.join()
  # 7.关闭
  # tcp_msg.close()
def main():
  # 1创建TCP对象
  tcp_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  # 2.绑定ip和端口
  tcp_sock.bind(('', 9999))
  # 3.改主动为被动
  tcp_sock.listen(128)
  # 4.accept接收msg和ip
  while True:
    tcp_msg, ip = tcp_sock.accept()
    process = multiprocessing.Process(target=speak_process, args=(tcp_sock, tcp_msg, ip))
    process.start()
if __name__ == '__main__':
  main()

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python奇偶行分开存储实现代码
Mar 19 Python
Python列表推导式与生成器用法分析
Aug 02 Python
Django中的ajax请求
Oct 19 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
May 23 Python
关于Python作用域自学总结
Jun 10 Python
python中的decimal类型转换实例详解
Jun 26 Python
基于Python检测动态物体颜色过程解析
Dec 04 Python
使用Keras预训练好的模型进行目标类别预测详解
Jun 27 Python
分布式全文检索引擎ElasticSearch原理及使用实例
Nov 14 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
Feb 25 Python
python cv2图像质量压缩的算法示例
Jun 04 Python
Python 避免字典和元组的多重嵌套问题
Jul 15 Python
Python实现字符串中某个字母的替代功能
Oct 21 #Python
基于Python实现船舶的MMSI的获取(推荐)
Oct 21 #Python
基于Python解密仿射密码
Oct 21 #Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 #Python
python超时重新请求解决方案
Oct 21 #Python
详解python中*号的用法
Oct 21 #Python
python中bytes和str类型的区别
Oct 21 #Python
You might like
PHP array_multisort()函数的使用札记
2011/07/03 PHP
使用php记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
php字符串函数学习之strstr()
2015/03/27 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
PHP模拟QQ登录的方法
2015/07/29 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
2016/09/11 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
定义JavaScript二维数组采用定义数组的数组来实现
2012/12/09 Javascript
超级好用的jQuery圆角插件 Corner速成
2014/08/31 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
python测试驱动开发实例
2014/10/08 Python
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
2015/05/05 Python
Python sys.argv用法实例
2015/05/28 Python
在Python的Django框架中包装视图函数
2015/07/20 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
python函数定义和调用过程详解
2020/02/09 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
python中的对数log函数表示及用法
2020/12/09 Python
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
美国领先的奢侈美容零售商:Bluemercury
2017/07/26 全球购物
ALDO英国官网:加拿大女鞋品牌
2018/02/19 全球购物
中国好声音广告词
2014/03/18 职场文书
班级出游活动计划书
2014/08/15 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
2015重阳节座谈会主持词
2015/07/30 职场文书
创业计划书之冷饮店
2019/09/27 职场文书
入门学习Go的基本语法
2021/07/07 Golang
mysql 子查询的使用
2022/04/28 MySQL