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文件右键找不到IDLE打开项解决办法
Jun 08 Python
python删除指定类型(或非指定)的文件实例详解
Jul 06 Python
Python计算两个日期相差天数的方法示例
May 23 Python
VTK与Python实现机械臂三维模型可视化详解
Dec 13 Python
Python语言描述连续子数组的最大和
Jan 04 Python
解决matplotlib库show()方法不显示图片的问题
May 24 Python
Django rest framework工具包简单用法示例
Jul 20 Python
Python3 pandas 操作列表实例详解
Sep 23 Python
Django学习之文件上传与下载
Oct 06 Python
Python3实现配置文件差异对比脚本
Nov 18 Python
Python格式化输出--%s,%d,%f的代码解析
Apr 29 Python
python求解汉诺塔游戏
Jul 09 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继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
php中namespace use用法实例分析
2016/01/22 PHP
PHP二维数组去重实例分析
2016/11/18 PHP
yii2使用gridView实现下拉列表筛选数据
2017/04/10 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
Laravel统计一段时间间隔的数据方法
2019/10/09 PHP
Laravel框架控制器,视图及模型操作图文详解
2019/12/04 PHP
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
jQuery 核心函数以及jQuery对象
2010/03/23 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
基于Javascript实现倒计时功能
2016/02/22 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
Javascript的console['']常用输入方法汇总
2018/04/26 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
Ant design vue中的联动选择取消操作
2020/10/31 Javascript
Python装饰器基础详解
2016/03/09 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
诉讼代理人授权委托书
2014/04/08 职场文书
铁路安全事故反思
2014/04/26 职场文书
2014年信息宣传工作总结
2014/12/18 职场文书
仓管员岗位职责
2015/02/03 职场文书
国庆节慰问信
2015/02/15 职场文书
联欢会开场白
2015/06/01 职场文书
立春观后感
2015/06/18 职场文书
python百行代码实现汉服圈图片爬取
2021/11/23 Python
使用Python通过企业微信应用给企业成员发消息
2022/04/18 Python