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 paramiko实现ssh远程访问的方法
Dec 03 Python
python获取文件版本信息、公司名和产品名的方法
Oct 05 Python
Python实现定时精度可调节的定时器
Apr 15 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
Jun 25 Python
Python3远程监控程序的实现方法
Jul 15 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
Aug 07 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
Aug 09 Python
使用Pandas的Series方法绘制图像教程
Dec 04 Python
Python基于paramunittest模块实现excl参数化
Apr 26 Python
python输出结果刷新及进度条的实现操作
Jul 13 Python
使用Python操作MySQL的小技巧
Sep 10 Python
python中编写函数并调用的知识点总结
Jan 13 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中的global
2014/08/19 PHP
PHP获取二维数组中某一列的值集合
2015/12/25 PHP
Centos PHP 扩展Xchche的安装教程
2016/07/09 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
PDO::_construct讲解
2019/01/27 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
jquery属性过滤选择器使用示例
2013/06/18 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
2014/09/26 NodeJs
使用jsonp完美解决跨域问题
2014/11/27 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
Javascript发送AJAX请求实例代码
2016/08/21 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
JS触摸与手势事件详解
2017/05/09 Javascript
微信小程序如何获取用户手机号
2018/01/26 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
2018/05/25 Javascript
js中时间格式化的几种方法
2018/07/22 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
vue.js iview打包上线后字体图标不显示解决办法
2020/01/20 Javascript
ES6 Symbol在对象中的作用实例分析
2020/06/06 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
python登录豆瓣并发帖的方法
2015/07/08 Python
Python文本处理之按行处理大文件的方法
2018/04/09 Python
Python3常见函数range()用法详解
2019/12/30 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
社区法制宣传月活动总结
2015/05/07 职场文书
企业培训简报范文
2015/07/20 职场文书
同事欢送会致辞
2015/07/31 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书
2016年安康杯竞赛活动总结
2016/04/05 职场文书