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数组过滤实现方法
Jul 27 Python
解决Python出现_warn_unsafe_extraction问题的方法
Mar 24 Python
python变量不能以数字打头详解
Jul 06 Python
windows10下安装TensorFlow Object Detection API的步骤
Jun 13 Python
python自动化工具之pywinauto实例详解
Aug 26 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
Feb 20 Python
深入理解Tensorflow中的masking和padding
Feb 24 Python
Python通过zookeeper实现分布式服务代码解析
Jul 22 Python
如何使用 Flask 做一个评论系统
Nov 27 Python
使用Django的JsonResponse返回数据的实现
Jan 15 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 Python
opencv-python图像配准(匹配和叠加)的实现
Jun 23 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之变量、常量学习笔记
2008/03/27 PHP
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
2012/05/16 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
PHP回调函数概念与用法实例分析
2017/11/03 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
静态页面的值传递(三部曲)
2006/09/25 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
通过sails和阿里大于实现短信验证
2017/01/04 Javascript
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
vue+iview/elementUi实现城市多选
2019/03/28 Javascript
layui的layedit富文本赋值方法
2019/09/18 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
Python实现将文本生成二维码的方法示例
2017/07/18 Python
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
Python实现的绘制三维双螺旋线图形功能示例
2018/06/23 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
5分钟 Pipenv 上手指南
2018/12/20 Python
Apache部署Django项目图文详解
2019/07/30 Python
Python List列表对象内置方法实例详解
2019/10/22 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
Python turtle画图库&&画姓名实例
2020/01/19 Python
芬兰汽车配件商店:Autonvaraosat24
2017/01/30 全球购物
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
现役军人家属慰问信
2015/03/24 职场文书
MySQL 使用SQL语句修改表名的实现
2021/04/07 MySQL
python实现简单聊天功能
2021/07/07 Python
联想win10摄像头打不开怎么办?win10笔记本摄像头打不开解决办法
2022/04/08 数码科技