草庐IT

python - 与手写 C 相比,pypy 是否可以快速处理线程和套接字?

coder 2023-08-23 原文

与手写 C 相比,pypy 是否可以快速处理线程和套接字?与普通 python 相比?

我只是想尝试一下,但有问题的 python 代码是为我不是管理员的小型计算机集群编写的。我在这里问是因为我尝试使用 google 只提供了与 cython、unladen swallow 等的比较,如果这不太可能工作,我不想打扰管理员。

我实际上并不需要 pypy 才能像 C 语言那样擅长;我希望使用它,因为现在解释器的开销完全盖过了我正在尝试计时的计算。我只需要 pypy 让我接近手写 C。

最佳答案

Does pypy handle threads and sockets quickly compared to hand written C?

没有。通常情况相同或更差。

PyPy 保留了 CPython 所拥有的全局解释器锁 (GIL)。这意味着 native 线程无法并行运行 Python 代码。 Python 线程还具有额外的语义,但这是有代价的。许多同步都围绕着 Python 线程的启动、关闭和线程对象的跟踪。相比之下,C 线程启动速度更快,使用成本更低,并且可以完全并行运行。

高效的套接字处理需要尽量减少等待下一个套接字事件的时间。由于 PyPy 的线程模型仍然受 GIL 约束,这意味着从阻塞套接字调用返回的线程在获得 GIL 之前无法继续。等效的 C 代码通常执行得更快,并且可以更快地返回等待套接字事件。

Compared to normal python?

是的。但不多。

由于上述原因,除了 JIT 和其他开销导致的偶尔峰值外,PyPy 将需要更少的 CPU 时间来处理等效代码。因此,线程和套接字处理速度更快,响应更快。

I would just try it, but the python code in question was written for a small cluster of computers on which I am not an admin. I'm asking here because my attempts to google only provided comparisons to cython, unladen swallow, ect., and I don't want to bug the admin about it if this is unlikely to work.

如果您的代码受 CPU 限制,PyPy 只会显着提高性能。 PyPy 是 fastest我知道的 Python 实现 native 运行。你可以调查一些 other implementations ,或者如果真正的线程并行性对您来说是一个高优先级,请考虑编写 C 扩展。

I don't actually need pypy to be as good at C; I'm looking to use it because right now the interpreter's overhead is completely overshadowing the computation I'm trying to time. I just need pypy to get me in the neighborhood of handwritten C.

缩小与 C 的性能差距是目前 PyPy 的最大特点。我强烈建议您尝试一下。

关于python - 与手写 C 相比,pypy 是否可以快速处理线程和套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9450812/

有关python - 与手写 C 相比,pypy 是否可以快速处理线程和套接字?的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  3. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  4. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  5. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  6. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  7. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  8. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  9. ruby - 检查字符串是否包含散列中的任何键并返回它包含的键的值 - 2

    我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案

  10. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

随机推荐