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 相关文章推荐
使用go和python递归删除.ds store文件的方法
Jan 22 Python
Python网络爬虫中的同步与异步示例详解
Feb 03 Python
pycharm 主题theme设置调整仿sublime的方法
May 23 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
Oct 26 Python
Django 多环境配置详解
May 14 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
Feb 22 Python
Anaconda和ipython环境适配的实现
Apr 22 Python
Django权限设置及验证方式
May 13 Python
python suds访问webservice服务实现
Jun 26 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
Jul 03 Python
Python远程方法调用实现过程解析
Jul 28 Python
Django实现随机图形验证码的示例
Oct 15 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访问带有密码的Redis方法示例
2017/02/09 PHP
php从数据库中读取特定的行(实例)
2017/06/02 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
PHP后门隐藏的一些技巧总结
2020/11/04 PHP
控制打印时页眉角的代码
2007/02/08 Javascript
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
Extjs学习笔记之六 面版
2010/01/08 Javascript
select标记美化--JS式插件、后期加载
2013/04/01 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
js实现图片粘贴上传到服务器并展示的实例
2017/11/08 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
js实现单元格拖拽效果
2020/02/10 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
在Echarts图中给坐标轴加一个标识线markLine
2020/07/20 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
Python打印斐波拉契数列实例
2015/07/07 Python
python list排序的两种方法及实例讲解
2017/03/20 Python
python用列表生成式写嵌套循环的方法
2018/11/08 Python
python的内存管理和垃圾回收机制详解
2019/05/18 Python
Python序列类型的打包和解包实例
2019/12/21 Python
浅析python连接数据库的重要事项
2021/02/22 Python
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
什么是URL
2015/12/13 面试题
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
建筑工程实习自我鉴定
2013/09/19 职场文书
新郎婚宴答谢词
2014/01/19 职场文书
碧霞祠导游词
2015/02/09 职场文书
工会积极分子个人总结
2015/03/03 职场文书