pypy3与python多线程比较
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多线程比较相关推荐
- Python多线程(3)——Queue模块
Python多线程(3)--Queue模块 Queue模块支持先进先出(FIFO)队列,支持多线程的访问,包括一个主要的类型(Queue)和两个异常类(exception classes). Pyth ...
- python统计csv行数_对Python 多线程统计所有csv文件的行数方法详解
如下所示: #统计某文件夹下的所有csv文件的行数(多线程) import threading import csv import os class MyThreadLine(threading.Th ...
- c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划
作者 | 万里羊责编 | 王晓曼出品 | CSDN博客线程和进程计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行.如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间 ...
- python3 多线程_图解|为什么 Python 多线程无法利用多核
(给Python开发者加星标,提升Python技能) 来源:后端技术指南针 1.全局解释锁 如题: Python的多线程为什么不能利用多核处理器? 全局解释器锁(Global Interpreter ...
- python多线程下的信号处理程序示例
下面是一个网上转载的实现思路,经过验证,发现是可行的,就记录下来. 思路 python多线程中要响应Ctrl+C的信号以杀死整个进程,需要: 1.把所有子线程设为Daemon: 2.使用isAlive ...
- Python 多线程抓取网页 牛人 use raw socket implement http request great
Python 多线程抓取网页 - 糖拌咸鱼 - 博客园 Python 多线程抓取网页 最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术 ...
- python 多线程编程之_thread模块
python 多线程编程之_thread模块 参考书籍:python核心编程 _thread模块除了可以派生线程外,还提供了基本的同步数据结构,又称为锁对象(lock object,也叫原语锁.简单锁 ...
- python多线程读取文件的问题_Python多线程同步---文件读写控制方法
1.实现文件读写的文件ltz_schedule_times.py #! /usr/bin/env python #coding=utf-8 import os def ReadTimes(): res ...
- c语言多线程转python多线程,真正的python 多线程!一个修饰符让你的多线程和C语言一样快...
> Python 多线程因为GIL的存在,导致其速度比单线程还要慢.但是近期我发现了一个相当好用的库,这个库只需要增加一个修饰符就可以使原生的python多线程实现真正意义上的并发.本文将和大家 ...
最新文章
- 数据竞争(data race)问题分析的利器——valgrind的Helgrind
- python3 _笨方法学Python_日记_DAY3
- 设计模式 — 行为型模式 — 访问者模式
- JAVA API在线中文文档地址链接
- spring boot + vue + element-ui全栈开发入门
- PAT 乙级(Basic Level) 题解汇总(持续更新)(C++)
- fcpx插件Corporate Story for Mac(商务公司视频宣传片头模板)
- 初学者python笔记(os模块、sys模块)
- C++-string““s操作符
- MAC系统下 win7虚拟机上网应该怎么设置啊
- python与java区别-Java与Python到底有什么区别和共同点详细对比
- mysql找不到服务_win7系统安装mysql后找不到服务或提示找不到指定文件如何解决...
- Verilog 语言2选1数据选择器
- 关于代码家(干货集中营)共享android端知识点综合整理
- NERO8注册码序列号
- 爬虫实战之抓取猫眼电影排行TOP100(使用正则表达式提取数据)
- 1154 Vertex Coloring
- UCF Local Programming Contest 2016 K. Bouncing Bunnies 最短路
- WinNTSetup安装Windows10 wim格式文件的使用教程
- 微信公众平台开发测试账号配置URL失败的问题