GVKun编程网logo

100 天精通 Python(进阶篇)—— 第 38 天:多进程【文末送书三本】(python多进程教程)

2

在本文中,我们将给您介绍关于100天精通Python的详细内容,并且为您解答进阶篇——第38天:多进程【文末送书三本】的相关问题,此外,我们还将为您提供关于100天精通Python——第41天:自动化

在本文中,我们将给您介绍关于100 天精通 Python的详细内容,并且为您解答进阶篇—— 第 38 天:多进程【文末送书三本】的相关问题,此外,我们还将为您提供关于100天精通Python——第41天:自动化操作Excel(xlrd和xlwt)【文末送书三本】、100天精通Python(进阶篇)——第40天:操作MongoDB数据库【文末送书三本】、C# 求 1-100 的质数,100-1000 的水仙花数,1-100 所有的平方和平方平方根、python IO密集型任务、计算密集型任务如何选择使用多线程、多进程的知识。

本文目录一览:

100 天精通 Python(进阶篇)—— 第 38 天:多进程【文末送书三本】(python多进程教程)

100 天精通 Python(进阶篇)—— 第 38 天:多进程【文末送书三本】(python多进程教程)

OSC 请你来轰趴啦!1028 苏州源创会,一起寻宝 AI 时代

转:

100 天精通 Python(进阶篇)—— 第 38 天:多进程【文末送书三本】

100天精通Python(进阶篇)——第38天:多进程【文末送书三本】

文章目录

  • 每篇前言
  • 一、什么是多进程?
    • 1. 进程
    • 2. 进程的状态
  • 二、进程的创建 - multiprocessing
    • 1. Process 类语法说明
    • 2. 2 个 while 循环一起执行
    • 3. 进程 pid
    • 4. 给子进程指定的函数传递参数
    • 5. 进程间不同享全局变量
  • 三、进程间同步 - Queue
    • 1. Queue 类语法说明
    • 2. Queue 的使用
    • 3. Queue 实例
  • 四、进程间同步 - Lock
  • 五、进程池 Pool
    • 1. Pool 类语法说明

转:

100 天精通 Python(进阶篇)—— 第 38 天:多进程【文末送书三本】


--Posted from Rpc

100天精通Python——第41天:自动化操作Excel(xlrd和xlwt)【文末送书三本】

100天精通Python——第41天:自动化操作Excel(xlrd和xlwt)【文末送书三本】

在这里插入图片描述

文章目录

  • 每篇前言
  • 一、Python操作Excel 7大库对比
  • 二、xlrd 读取excel操作
    • 1. 打开文件
    • 2. 获取所有表名
    • 3. 指定sheet表
    • 4. 对sheet表的行操作
    • 5. 对sheet表的列操作
  • 三、xlwt 写入Excel表操作
    • 1. 写入单个数据
    • 2. 写入多个数据
    • 3. 设置列宽
    • 4. 设置行高
    • 5. 设置单元格风格
  • 四、 如何让学习更加高效呢?
  • 五、参与抽粉丝送书啦

每篇前言

100天精通Python(进阶篇)——第40天:操作MongoDB数据库【文末送书三本】

100天精通Python(进阶篇)——第40天:操作MongoDB数据库【文末送书三本】

@H_301_0@

在这里插入图片描述

@H_301_0@

文章目录

  • 每篇前言
  • 一、安装pymongo库
  • 二、数据库操作
    • 1、连接数据库
    • 2、数据库操作
    • 3、集合操作
    • 4、插入文档
      • 插入一个文档
      • 插入多个文档
      • 插入指定 _id 的多个文档
    • 5、查看文档
      • 查询一条数据
      • 查询集合中所有数据
      • 查询指定字段的数据
      • 根据指定条件查询
      • 高级查询
      • 使用正则表达式查询
      • 返回指定条数记录
    • 6、修改文档
      • 修改一条
      • 修改全部

C# 求 1-100 的质数,100-1000 的水仙花数,1-100 所有的平方和平方平方根

C# 求 1-100 的质数,100-1000 的水仙花数,1-100 所有的平方和平方平方根

// 你们的鼓励是我最大的动力 大家可以多留言评论  在接下来很长一段时间我会从初级到高级每天更新 大家有想学习的内容也可以留言哦

// 现在是我做 C# 老师的第 28 天,希望和大家一起努力 加油

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FOR
{
class Program
{
static void Main(string[] args)
{
//1 求出 1~100 之间的质数 什么是质数 。 质数:从 2 开始除了 1 和它本身不能被任何数整出的数叫做质数比如 2,3,5,7

int count = 0;// 计算器
for (int i = 2; i <= 100; i++)
{
bool zhi = true;
for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
zhi = false;
break;
}
}
if (zhi == true)
{
count++;
Console.WriteLine ("1-100 以内的质数有 {0}", i);
}
}
Console.WriteLine ("1-100 以内的质数总共有 {0} 个", count);

//2 求出 100-1000 以内的水仙花数 什么是水仙花数? 水仙花数:"153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3"
for (int k = 100; k < 1000; k++)
{
int ge = k % 10;
int shi = ((k-ge)%100)/10;
int bai =(k-(ge+shi*10))/100;
int sxh = bai * bai * bai + shi * shi * shi + ge * ge * ge;
if (k == sxh)
{
Console.WriteLine ("100-1000 以内的水仙花数有 {0}", k);
}

}

// 求出 1-100 的平方和平方根
for (int h = 1; h < 100; h++)
{
int pf = h * h;
double pfg = Math.Sqrt(h);
Console.WriteLine ("{0} 的平方是 {1},平方根是 {2}",h,pf,pfg);
}
}
}
}

python IO密集型任务、计算密集型任务如何选择使用多线程、多进程

python IO密集型任务、计算密集型任务如何选择使用多线程、多进程

IO密集型任务 VS 计算密集型任务

  • 所谓IO密集型任务,是指磁盘IO、网络IO占主要的任务,计算量很小。比如请求网页、读写文件等。当然我们在Python中可以利用sleep达到IO密集型任务的目的。

  • 所谓计算密集型任务,是指cpu计算占主要的任务,cpu一直处于满负荷状态。比如在一个很大的列表中查找元素(当然这不合理),复杂的加减乘除等。

多线程 VS 多进程

Python中比较常见的并发方式主要有两种:多线程和多进程。当然还有协程,这里不做介绍。

1、多线程

多线程即在一个进程中启动多个线程执行任务。一般来说使用多线程可以达到并行的目的,但由于Python中使用了全局解释锁GIL的概念,导致Python中的多线程并不是并行执行,而是“交替执行”。类似于下图:(图片转自网络,侵删)

所以Python中的多线程适合IO密集型任务,而不适合计算密集型任务。

Python提供两组多线程接口,一是thread模块_thread,提供低等级接口。二是threading模块,提供更容易使用的基于对象的接口,可以继承Thread对象来实现线程,此外其还提供了其它线程相关的对象,例如Timer,Lock等。

2、多进程

由于Python中GIL的原因,对于计算密集型任务,Python下比较好的并行方式是使用多进程,这样可以非常有效的使用cpu资源。当然同一时间执行的进程数量取决你电脑的cpu核心数。

Python中的进程模块为mutliprocess模块,提供了很多容易使用的基于对象的接口。另外它提供了封装好的管道和队列,可以方便的在进程间传递消息。Python还提供了进程池Pool对象,可以方便的管理和控制线程。

代码测试:

# _*_ coding:utf-8 from __future__ import unicode_literals __author__ = 'chenxinming' __date__ = '2018/6/27 0027 11:52' import multiprocessing import threading import time queue = multiprocessing.Queue() def init_queue():     print('初始化queue')     while not queue.empty():         queue.get()     for _index in range(10):         queue.put(_index)     print ('初始化queue结束') # 定义一个io密集型任务 利用time.sleep() def task_io(task_id, queue=queue):     print (queue.empty())     print ('io密集型:{} 开始'.format(task_id))     while not queue.empty():         time.sleep(1)         try:             data = queue.get(block=True, timeout=1)             print ('io密集型任务:{} 得到数据:{}'.format(task_id, data))         except Exception as e:             print ('io密集型任务:{} 错误:{}'.format(task_id, str(e)))     print ('io密集型任务:{} 结束'.format(task_id))     return g_search_list = list(range(10000)) # 定义一个计算密集型任务,利用一些复杂加减乘除、列表查找等 def task_cpu(task_id):     print ('cpu计算密集任务:{} 开始'.format(task_id))     while not queue.empty():         count = 0         for i in range(10000):             count += pow(3 * 2, 3 * 2) if i in g_search_list else 0         try:             data = queue.get(block=True, timeout=1)             print ('cpu计算密集任务: {} 得到数据:{}'.format(task_id, data))         except Exception as e:             print ('cpu计算密集任务:{} 错误:{}'.format(task_id, str(e)))     print ('cpu计算密集任务:{} 结束'.format(task_id))     return task_id if __name__ == '__main__':     print ('cpu 数量', multiprocessing.cpu_count(), '\n')     print("========== 直接执行IO密集型任务 ==========")     init_queue()     time_0 = time.time()     task_io(0)     print("结束:", time.time() - time_0, "\n")     print("========== 多线程执行IO密集型任务 ==========")     init_queue()     time_0 = time.time()     thread_list = [threading.Thread(target=task_io, args=(i,)) for i in range(5)]     for t in thread_list:         t.start()     for t in thread_list:         if t.is_alive():             t.join()     print("结束:", "\n")     print("========== 多进程执行IO密集型任务 ==========")     init_queue()     time_0 = time.time()     process_list = [multiprocessing.Process(target=task_io,)) for i in range(multiprocessing.cpu_count())]     for p in process_list:         p.start()     for p in process_list:         if p.is_alive():             p.join()     print("结束:", "\n")     print("========== 直接执行cpu密集型任务 ==========")     init_queue()     time_0 = time.time()     task_cpu(0)     print("结束:", "\n")     print("========== 多线程执行cpu密集型任务 ==========")     init_queue()     time_0 = time.time()     thread_list = [threading.Thread(target=task_cpu, "\n")     print("========== 多进程执行cpu密集型任务 ==========")     init_queue()     time_0 = time.time()     process_list = [multiprocessing.Process(target=task_cpu, "\n")

对于IO密集型任务:

直接执行用时:10.0333秒

多线程执行用时:4.0156秒

多进程执行用时:5.0182秒

说明多线程适合IO密集型任务。

对于计算密集型任务

直接执行用时:10.0273秒

多线程执行用时:13.247秒

多进程执行用时:6.8377秒

说明多进程适合计算密集型任务

原文:https://zhuanlan.zhihu.com/p/24283040


今天的关于100 天精通 Python进阶篇—— 第 38 天:多进程【文末送书三本】的分享已经结束,谢谢您的关注,如果想了解更多关于100天精通Python——第41天:自动化操作Excel(xlrd和xlwt)【文末送书三本】、100天精通Python(进阶篇)——第40天:操作MongoDB数据库【文末送书三本】、C# 求 1-100 的质数,100-1000 的水仙花数,1-100 所有的平方和平方平方根、python IO密集型任务、计算密集型任务如何选择使用多线程、多进程的相关知识,请在本站进行查询。

本文标签: