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开发WebService系列教程之REST,web.py,eurasia,Django
Jun 30 Python
python网络编程之数据传输UDP实例分析
May 20 Python
Python模拟简单电梯调度算法示例
Aug 20 Python
对django xadmin自定义菜单的实例详解
Jan 03 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
Jun 18 Python
python3中的eval和exec的区别与联系
Oct 10 Python
使用Python完成15位18位身份证的互转功能
Nov 06 Python
Python 线性回归分析以及评价指标详解
Apr 02 Python
python代码中怎么换行
Jun 17 Python
Python使用shutil模块实现文件拷贝
Jul 31 Python
Python如何将将模块分割成多个文件
Aug 04 Python
Python为何不支持switch语句原理详解
Oct 21 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中取得URL的根域名的代码
2011/03/23 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
nodejs读取memcache示例分享
2014/01/02 NodeJs
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
2016/08/03 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
基于vue的验证码组件的示例代码
2019/01/22 Javascript
jquery实现购物车基本功能
2019/10/25 jQuery
javascript的delete运算符知识点总结
2019/11/19 Javascript
微信小程序实现拨打电话功能的示例代码
2020/06/28 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
玩转python爬虫之cookie使用方法
2016/02/17 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
Django restframework 框架认证、权限、限流用法示例
2019/12/21 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
2021/01/27 Python
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
个人现实表现材料
2014/02/04 职场文书
寄语十八大感言
2014/02/07 职场文书
艺术节主持词
2014/04/02 职场文书
法人代表委托书
2014/04/04 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
小学班主任自我评价
2015/03/11 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
2016年小学端午节活动总结
2016/04/01 职场文书