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 相关文章推荐
Hadoop中的Python框架的使用指南
Apr 22 Python
Python对列表排序的方法实例分析
May 16 Python
如何将python中的List转化成dictionary
Aug 15 Python
scrapy spider的几种爬取方式实例代码
Jan 25 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
Apr 26 Python
Ubuntu下Anaconda和Pycharm配置方法详解
Jun 14 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
Jun 27 Python
python列表生成器迭代器实例解析
Dec 19 Python
用OpenCV进行年龄和性别检测的实现示例
Jan 29 Python
Python之多进程与多线程的使用
Feb 23 Python
浅谈Python列表嵌套字典转化的问题
Apr 07 Python
Python实现简单的猜单词
Jun 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之COOKIE支持详解
2010/09/20 PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
2014/06/12 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
php is_executable判断给定文件名是否可执行实例
2016/09/26 PHP
yii2安装详细流程
2018/05/23 PHP
php生成微信红包数组的方法
2019/09/05 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
js判断undefined类型示例代码
2014/02/10 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
vue实现样式之间的切换及vue动态样式的实现方法
2017/12/19 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
2018/12/20 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
2020/05/06 Javascript
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
[56:58]VP vs Optic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
Django admin美化插件suit使用示例
2017/12/12 Python
python实现简单flappy bird
2018/12/24 Python
python实现狄克斯特拉算法
2019/01/17 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
matplotlib基础绘图命令之bar的使用方法
2020/08/13 Python
ROSEFIELD手表荷兰官方网上商店:北欧极简设计女士腕表品牌
2018/01/24 全球购物
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
上海期货面试题
2014/01/31 面试题
职业教育毕业生求职信
2013/11/09 职场文书
2014年国庆节演讲稿
2014/09/02 职场文书
学习保证书怎么写
2015/02/26 职场文书
2015大学党建带团建工作总结
2015/07/23 职场文书
北京大学中文系教授推荐的10本小说
2019/08/08 职场文书
MySQL基础(二)
2021/04/05 MySQL
浅谈node.js中间件有哪些类型
2021/04/29 Javascript
Python Pandas 删除列操作
2022/03/16 Python