title: pypy3与python多线程比较
description:
tags:

  • python基础
  • pypy3
    categories:
  • python3
    date: 2019-12-20 22:59:15

pypy简介

  • 项目背景

    PyPy [1] 是Python开发者为了更好的Hack Python创建的项目。此外,PyPy比CPython是更加灵活,易于使用和试验,以制定具体的功能在不同情况的实现方法,可以很容易实施。 该项目的目标是,让PyPy比C实现的Python更为容易的适应各个项目和方便裁剪。

  • 现状介绍

    • PyPy是Armin Rigo开发的,Python语言的动态编译器,是Psyco的后继项目。PyPy的目的是,做到Psyco没有做到的动态编译。

    • PyPy开始只是研究性质的项目。但是开发非常成熟,在2007年中旬发布了1.0 Release版本后,大家关注的焦点是,能否在2008年出现可供生产环境使用的版本。

    • 最新的(2018.12.15)PyPy版本是PyPy3 v6.0.0,兼容Python3.5.3。可以运行在Linux的32位和64位、MacOSX和Windows的32位平台中,但是基于arm平台的正在开发中。它支持Python语言的所有核心部分以及大多数的Python语言标准库函数模块,并且通过了Python语言的test suite。与CPython的区别可以去看它的兼容性页面.

    • PyPy还提供了JIT编译器和沙盒功能,因此运行速度比CPython要快,以及可以安全的运行一些不被信任的代码。PyPy还有一个单独的支持微线程的版本。

    • 另外,PyPy 也有 每夜构建 版本供开发者测试。

    • PyPy是作为Specific Targeted Research Projects(特定领域研究项目)从2004年12月到2007年3月,开始接受欧盟的援助。

  • 实现原理

    • PyPy的第一部分:用Python实现的Python

    • 其实这么说并不准确,准确得说应该是用rPython实现的Python,rPython是Python的一个子集,虽然rPython不是完整的Python,但用rPython写的这个Python实现却是可以解释完整的Python语言。

    • PyPy的第二部分:编译器

    • 这是一个编译rPython的编译器,或者说这个编译器有一个rPython的前端,目前也只有这么一个前端,不过它的后端却是不少,也就是说这个编译器支持许多的目标语言,比较重要的有:C,CIL,Javascript … [2]

    主要特性

    • 大量的性能改进。
    • Bug修复,以及与CPython的兼容性修复。
    • 现在stackless功能默认启用。
    • NumPy effort现在更名为numpypy,使用时可以简单写作:import numpypy as numpy。
    • JSON编码器已被替换为一个新的,是用纯Python编写的,某些情况下比CPython的C扩展快2倍,比PyPy 1.6中的快20倍左右。
    • 一些RPython模块的内存占用已得到大幅改善。

    另外,有一些功能正在开发,将包含在1.8版本中,这些功能包括:

    • 特殊列表实现。可以大幅改善一些应用程序的性能/内存影响。
    • NumPy effort即将支持多维数组。
    • 两个新的JIT编译器后端,尤其针对PowerPC和ARM处理器。

一、python多线程

from django.test import TestCase# Create your tests here.
import threadingnum = 0def change_it(n):global numfor i in range(1000000):num = num + nnum = num - nprint(num)threads = [threading.Thread(target=change_it, args=(8,)),threading.Thread(target=change_it, args=(10,)),threading.Thread(target=change_it, args=(5,))
][t.start() for t in threads]
[t.join() for t in threads]
print(num)

我们运行三次

第一次

10
0
-5
-5

第二次

0
10
10
10

第三次

0
8
18
18

二、pypy3多线程

from django.test import TestCase# Create your tests here.
import threadingnum = 0def change_it(n):global numfor i in range(1000000):num = num + nnum = num - nprint(num)threads = [threading.Thread(target=change_it, args=(8,)),threading.Thread(target=change_it, args=(10,)),threading.Thread(target=change_it, args=(5,))
][t.start() for t in threads]
[t.join() for t in threads]
print(num)

我们运行三次

第一次

0
0
0
0

第二次

0
0
0
0

第三次

0
0
0
0

我们发现pypy3在处理多线程的时候是比python处理能力更强

三、我们再看接下来的比较

import times1 = time.time()ss = [x ** 2 for x in range(10000000)]
print("运行时间:", time.time() - s1)

pypy3运行速度是不如python的

所以我们在合适的地方选择合适解释器

并没有一个解释器是完美的

pypy3与python多线程比较相关推荐

  1. Python多线程(3)——Queue模块

    Python多线程(3)--Queue模块 Queue模块支持先进先出(FIFO)队列,支持多线程的访问,包括一个主要的类型(Queue)和两个异常类(exception classes). Pyth ...

  2. python统计csv行数_对Python 多线程统计所有csv文件的行数方法详解

    如下所示: #统计某文件夹下的所有csv文件的行数(多线程) import threading import csv import os class MyThreadLine(threading.Th ...

  3. c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划

    作者 | 万里羊责编 | 王晓曼出品 | CSDN博客线程和进程计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行.如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间 ...

  4. python3 多线程_图解|为什么 Python 多线程无法利用多核

    (给Python开发者加星标,提升Python技能) 来源:后端技术指南针 1.全局解释锁 如题: Python的多线程为什么不能利用多核处理器? 全局解释器锁(Global Interpreter ...

  5. python多线程下的信号处理程序示例

    下面是一个网上转载的实现思路,经过验证,发现是可行的,就记录下来. 思路 python多线程中要响应Ctrl+C的信号以杀死整个进程,需要: 1.把所有子线程设为Daemon: 2.使用isAlive ...

  6. Python 多线程抓取网页 牛人 use raw socket implement http request great

    Python 多线程抓取网页 - 糖拌咸鱼 - 博客园 Python 多线程抓取网页 最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术 ...

  7. python 多线程编程之_thread模块

    python 多线程编程之_thread模块 参考书籍:python核心编程 _thread模块除了可以派生线程外,还提供了基本的同步数据结构,又称为锁对象(lock object,也叫原语锁.简单锁 ...

  8. python多线程读取文件的问题_Python多线程同步---文件读写控制方法

    1.实现文件读写的文件ltz_schedule_times.py #! /usr/bin/env python #coding=utf-8 import os def ReadTimes(): res ...

  9. c语言多线程转python多线程,真正的python 多线程!一个修饰符让你的多线程和C语言一样快...

    > Python 多线程因为GIL的存在,导致其速度比单线程还要慢.但是近期我发现了一个相当好用的库,这个库只需要增加一个修饰符就可以使原生的python多线程实现真正意义上的并发.本文将和大家 ...

最新文章

  1. 数据竞争(data race)问题分析的利器——valgrind的Helgrind
  2. python3 _笨方法学Python_日记_DAY3
  3. 设计模式 — 行为型模式 — 访问者模式
  4. JAVA API在线中文文档地址链接
  5. spring boot + vue + element-ui全栈开发入门
  6. PAT 乙级(Basic Level) 题解汇总(持续更新)(C++)
  7. fcpx插件Corporate Story for Mac(商务公司视频宣传片头模板)
  8. 初学者python笔记(os模块、sys模块)
  9. C++-string““s操作符
  10. MAC系统下 win7虚拟机上网应该怎么设置啊
  11. python与java区别-Java与Python到底有什么区别和共同点详细对比
  12. mysql找不到服务_win7系统安装mysql后找不到服务或提示找不到指定文件如何解决...
  13. Verilog 语言2选1数据选择器
  14. 关于代码家(干货集中营)共享android端知识点综合整理
  15. NERO8注册码序列号
  16. 爬虫实战之抓取猫眼电影排行TOP100(使用正则表达式提取数据)
  17. 1154 Vertex Coloring
  18. UCF Local Programming Contest 2016 K. Bouncing Bunnies 最短路
  19. WinNTSetup安装Windows10 wim格式文件的使用教程
  20. 微信公众平台开发测试账号配置URL失败的问题

热门文章

  1. 关于p标签去除默认样式问题
  2. 大规模场景下 kubernetes 集群的性能优化
  3. 截止至2022/8/23,CUDA ToolKit对应Nvdia驱动
  4. html中失焦事件怎么写的,jquery中怎样触发失去焦点事件?
  5. osg bullet
  6. 0x80070570,文件或目录损坏且无法读取
  7. enzyme react 组件测试
  8. 逃脱小屋,中国式离婚
  9. 鸿蒙3.0开发者大会,鸿蒙2.0来了!华为开发者大会HDC 2020宣布
  10. Java项目中高并发问题的简单解决方案