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 文件操作实现代码
Oct 07 Python
跟老齐学Python之玩转字符串(3)
Sep 14 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
Jul 27 Python
Python将图片批量从png格式转换至WebP格式
Aug 22 Python
Python内置函数——__import__ 的使用方法
Nov 24 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
Feb 13 Python
Python网页正文转换语音文件的操作方法
Dec 09 Python
对python中url参数编码与解码的实例详解
Jul 25 Python
python中文分词库jieba使用方法详解
Feb 11 Python
详解Python中namedtuple的使用
Apr 27 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
Sep 04 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中导出数据到excel时数字变为科学计数的解决方法
2013/02/03 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
javascript 页面只自动刷新一次
2009/07/10 Javascript
javascript函数中的arguments参数
2010/08/01 Javascript
js点击更换背景颜色或图片的实例代码
2013/06/25 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
2015/03/04 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
vuejs2.0实现一个简单的分页示例
2017/02/22 Javascript
Webpack如何引入bootstrap的方法
2017/06/17 Javascript
JS中使用media实现响应式布局
2017/08/04 Javascript
详解vue-cli构建项目反向代理配置
2017/09/07 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
[03:56]显微镜下的DOTA2第十一期——鬼畜的死亡先知播音员
2014/06/23 DOTA
Python中的装饰器用法详解
2015/01/14 Python
浅谈python对象数据的读写权限
2016/09/12 Python
python实现简单多人聊天室
2018/12/11 Python
python百行代码自制电脑端网速悬浮窗的实现
2020/05/12 Python
Python基于traceback模块获取异常信息
2020/07/23 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
html5配合css3实现带提示文字的输入框(摆脱js)
2013/03/08 HTML / CSS
澳大利亚头发和美容产品购物网站:OZ Hair & Beauty
2020/03/27 全球购物
SQL Server笔试题
2012/01/10 面试题
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
新郎新娘婚礼答谢词
2014/01/11 职场文书
中学生差生评语
2014/01/30 职场文书
手工社团活动方案
2014/02/17 职场文书
合作协议书范文
2014/08/20 职场文书
Golang Gob编码(gob包的使用详解)
2021/05/07 Golang