首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jython多线程

jython多线程
EN

Stack Overflow用户
提问于 2012-05-13 08:02:21
回答 4查看 5.8K关注 0票数 16

几个月前我开始学习python,然后我发现了Jython。

线程在Jython中能正常工作吗,因为它是doesn't have a GIL的?如果是这样,你能推荐一本关于并发(线程)的好书吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-27 18:46:29

我见过的关于多线程的最好的书是"Java Concurrency in Practice“。它非常专注于Java线程并发,当您开始理解并发带来的问题和可能性时,它既令人谦逊,又令人兴奋。然而,我几年前买的那本书在编码上有一些勘误表,这加剧了一个本已具有脑力挑战的主题:在这里查看勘误表:http://jcip.net/errata.html

尽管这本书是为希望尝试并发性的Java开发人员设计的(顺便说一句,这包括任何使用过任何类型的GUI界面的人),但我确信本书中概述的技术困难和微妙之处适用于任何并发性的实现。

顺便说一句,我也很喜欢Jython,并且我可以确认,你可以用Java做的任何并发方面的事情,你显然也可以用Jython做。但是,有一个警告:并发性可以用于异步编程(包括GUI)和/或性能。如果后者有问题,在我看来: Jython在我的经验中比同等的Java程序慢大约10倍。

这意味着要求更高的Jython模块将不得不调用Jython之外的其他东西来处理数字处理任务。同时,到目前为止,Jython还没有Python的多处理模块,所以进程间的通信是不存在的,除非您冒险进入RMI这个可怕的领域。如果你选择这个选项,你就比我更像一个男人/女人。但是一切都很好:请参考http://www.jython.org上的“Jython权威指南”……第19章是对并发的简单介绍,第10章是关于Java和Jython的集成(提示:它非常简单)。

Jython

  • 有趣:快速浏览一下Jython站点就会发现,就在10天前,17/05/12,2.7a1版本发布了……"Alpha“版本。这应该包含多处理模块,它是随Python 2.6一起提供的。Wd检查这一点很有趣:如果是这样的话,它可能会给你提供一个令人兴奋的选择,将Jython和CPython进程链接起来(稍后更新:遗憾的是,现在看起来并非如此--当我尝试时,模块名称"multiprocessing“无法识别)……

最后一句话:大多数专家对这些事情的了解比我说的要多得多,他们认为摩尔定律正在被Amdahl定律取代,简而言之,这意味着编写稳定和可伸缩的真正并发程序的艰巨挑战在未来将是不可避免的。通过使用聪明的代码分析工具,我不能确切地说,真正的(即线程)并发到底有多容易,但在这个主题上的投资,以及由并发强加的迷人的、智慧的新推理规则可能会得到回报……如果你喜欢挑战。

票数 7
EN

Stack Overflow用户

发布于 2012-05-15 15:28:27

是的,有了Jython,你就有了real multi-threading。Jython (JPython的后继者)是在JVM中运行的Python的一个实现。Jython和原始项目之间的主要区别之一是,第一个项目没有GIL,并且基于JVM的实现实现了真正的多线程支持。

我建议你看看这个bookOReilly's one。

票数 3
EN

Stack Overflow用户

发布于 2020-12-18 15:07:26

我已经用一个例子试过了。

要求:

Jythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjythonjython7或更高版本,从(https://www.oracle.com/in/java/technologies/javase-downloads.html)

代码语言:javascript
复制
from rough import print_time
from datetime import datetime

"""
This is actually using python threading package.
One thing I came to know is that if we use the python threading module also, 
internally Jython chnages it to Java thread and work.
"""
# from threading import Thread, InterruptedException

"""
This is the java threading module.
"""
from java.lang import Thread, InterruptedException


"""
Here you can call your module from the run method.
For passing arguments, you can use the constructor of the Cycle class.
"""
class Cycle(Thread):

    def __init__(self,time1=1):
        Thread.__init__(self)
        # arguments for the run method
        self.time1 = time1

    def run(self):
        try:
            # Calling the required module with given arguments
            print_time(self.time1)
        except InterruptedException:
            print("Exception")

if __name__ == '__main__':
    print("start time:",datetime.now())
  
    for i in range(100):
        Cycle(i).start()
        
    print("end time:",datetime.now())

请在https://github.com/om12nayak/Jython_multithreading_demo中找到完整的代码

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10568358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档