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 相关文章推荐
Django中几种重定向方法
Apr 28 Python
解决Linux系统中python matplotlib画图的中文显示问题
Jun 15 Python
Python实现的桶排序算法示例
Nov 29 Python
python3基于OpenCV实现证件照背景替换
Jul 18 Python
Django添加favicon.ico图标的示例代码
Aug 07 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
Jan 29 Python
学生信息管理系统Python面向对象版
Jan 30 Python
Python 实现数据结构-堆栈和队列的操作方法
Jul 17 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
Jan 09 Python
使用Python-OpenCV消除图像中孤立的小区域操作
Jul 05 Python
Python3爬虫发送请求的知识点实例
Jul 30 Python
分享Python获取本机IP地址的几种方法
Mar 17 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
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
多个checkbox被选中时如何判断是否有自己想要的
2014/09/22 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
js中this用法实例详解
2015/05/05 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
2015/07/01 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
JavaScript中双向数据绑定详解
2017/05/03 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
React Native中NavigatorIOS组件的简单使用详解
2018/01/27 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
React key值的作用和使用详解
2018/08/23 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
uni-app 组件里面获取元素宽高的实现
2019/12/27 Javascript
js验证账户名是否重复
2020/05/26 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
python实现Flappy Bird源码
2018/12/24 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
Python之字典添加元素的几种方法
2020/09/30 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
德国户外商店:eXXpozed
2020/07/25 全球购物
党员的自我评价范文
2014/01/02 职场文书
2014年安全生产责任书
2014/07/22 职场文书
委托书格式
2014/08/01 职场文书
2015双创工作总结
2015/07/24 职场文书
导游带团欢迎词
2015/09/30 职场文书
2019广播稿怎么写
2019/04/17 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL