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中对list去重的多种方法
Sep 18 Python
浅谈Python 中整型对象的存储问题
May 16 Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 Python
python实现朴素贝叶斯分类器
Mar 28 Python
利用python如何处理百万条数据(适用java新手)
Jun 06 Python
python+influxdb+shell编写区域网络状况表
Jul 27 Python
对python的输出和输出格式详解
Dec 08 Python
python 文本单词提取和词频统计的实例
Dec 22 Python
python redis 批量设置过期key过程解析
Nov 26 Python
python获取网络图片方法及整理过程详解
Dec 20 Python
python获取整个网页源码的方法
Aug 03 Python
Pandas的数据过滤实现
Jan 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的库,结果发现很多东西
2006/12/31 PHP
用PHP读取RSS feed的代码
2008/08/01 PHP
PHP 定界符 使用技巧
2009/06/14 PHP
php 多个submit提交表单 处理方法
2009/07/07 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
利用php生成验证码
2017/02/23 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
2019/10/10 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2006/11/24 Javascript
javascript实现轮显新闻标题链接
2007/08/13 Javascript
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
JQuery 插件模板 制作jquery插件的朋友可以参考下
2010/03/17 Javascript
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
javascript数组去掉重复
2011/05/12 Javascript
js实现的仿新浪微博完美的时间组件升级版
2011/12/20 Javascript
JQuery 操作/获取table具体代码
2013/06/13 Javascript
js创建子窗口并且回传值示例代码
2013/07/02 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
JS脚本实现动态给标签控件添加事件的方法
2016/06/02 Javascript
jQuery控制div实现随滚动条滚动效果
2016/06/07 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
小程序实现投票进度条
2019/11/20 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
Python按行读取文件的简单实现方法
2016/06/22 Python
解决Python的str强转int时遇到的问题
2018/04/09 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
Pytorch在NLP中的简单应用详解
2020/01/08 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
公司欠款证明
2015/06/24 职场文书
婚礼父母致辞
2015/07/28 职场文书
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python