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 相关文章推荐
TensorFlow深度学习之卷积神经网络CNN
Mar 09 Python
PyTorch学习笔记之回归实战
May 28 Python
TensorFlow的权值更新方法
Jun 14 Python
python微信公众号之关键词自动回复
Jun 15 Python
selenium3+python3环境搭建教程图解
Dec 07 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
Aug 02 Python
对Django的restful用法详解(自带的增删改查)
Aug 28 Python
Python中list循环遍历删除数据的正确方法
Sep 02 Python
python实现将一维列表转换为多维列表(numpy+reshape)
Nov 29 Python
python中count函数简单的实例讲解
Feb 06 Python
python json load json 数据后出现乱序的解决方案
Feb 27 Python
全网最全python库selenium自动化使用详细教程
Jan 12 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
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
php dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
2017/06/11 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
js抽奖实现随机抽奖代码效果
2013/12/02 Javascript
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
2017/01/17 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
2020/08/06 Javascript
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
Python的组合模式与责任链模式编程示例
2016/02/02 Python
python实现日常记账本小程序
2018/03/10 Python
PyTorch中Tensor的拼接与拆分的实现
2019/08/18 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
韩国流行时尚女装网站:Dintchina(中文)
2018/07/19 全球购物
捷克玩具商店:Bambule
2019/02/23 全球购物
机械设计专业应届生求职信
2013/11/21 职场文书
促销活动总结
2014/04/28 职场文书
员工薪酬激励方案
2014/06/13 职场文书
禁毒宣传标语
2014/06/19 职场文书
三严三实对照检查材料
2014/08/25 职场文书
法定代表人资格证明书
2014/09/11 职场文书
竞选学委演讲稿
2014/09/13 职场文书
租房协议书范例
2014/10/14 职场文书
北京爱情故事观后感
2015/06/12 职场文书
2016年党员公开承诺书范文
2016/03/24 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP
MySQL为id选择合适的数据类型
2021/06/07 MySQL
Pyqt5将多个类组合在一个界面显示的完整示例
2021/09/04 Python
使用Redis实现分布式锁的方法
2022/06/16 Redis