Java jython多线程

Java jython多线程,java,python,multithreading,jython,Java,Python,Multithreading,Jython,几个月前我开始学习python,后来我找到了Jython 线程在Jython中工作正常吗?如果是这样的话,你能推荐一本关于并发(线程)的好书吗?是的,你有Jython。Jython(Jython的继承者)是在JVM中运行的Python实现。Jython和原始项目之间的主要区别之一是,第一个项目没有GIL,并且基于JVM的实现实现了真正的多线程支持 我建议您看看这本书和这本书。我遇到的关于多线程的最好的书是《实践中的Java并发》。它非常专注于Java线程并发性,当您开始理解并发性带来的问题和可能

几个月前我开始学习python,后来我找到了Jython

线程在Jython中工作正常吗?如果是这样的话,你能推荐一本关于并发(线程)的好书吗?

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


我建议您看看这本书和这本书。

我遇到的关于多线程的最好的书是《实践中的Java并发》。它非常专注于Java线程并发性,当您开始理解并发性带来的问题和可能性时,它既令人谦卑又令人兴奋。几年前我买的这本书在编码上有一些错误,这加剧了一个已经对大脑构成挑战的主题:查看这里的错误:

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

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

这意味着要求更高的Jython模块将不得不调用Jython以外的东西来执行数字运算任务。同时,Jython到目前为止*还没有Python的多处理模块,因此进程间通信已经过时,除非您冒险进入RMI的可怕领域。如果你选择这样的话,你比我更像一个男人/女人。但一切都很好:请参阅“Jython的权威指南”,网址是。。。第19章是对并发性的一种简单介绍,第10章是关于Java和Jython的集成(提示:这非常简单)

  • 有趣的是:快速浏览一下Jython网站,就在10天前,2012年5月17日,版本2.7a1发布了。。。“阿尔法”版本。这应该包含Python2.6附带的多处理模块。检查这一点可能很有趣:如果是这样的话,它可能会给您提供链接Jython和CPython进程的激动人心的选项(稍后更新:遗憾的是,目前情况并非如此-我尝试时未识别模块名“multiprocessing”)

最后一句话:大多数对这些事情的了解比我说的要多的专家认为摩尔定律正在被阿姆达尔定律所取代,这意味着编程稳定且可扩展的真正并发程序的艰巨挑战在未来将不可避免。使用聪明的代码分析工具可以实现真正的(即线程)并发到底有多容易我不能说,但在这个主题上的投资以及并发所强加的迷人的、智能的新推理规则可能会有回报。。。如果您喜欢挑战的话。

最初令人困惑的方面可能是Java和Jython的并发机制。但这一切似乎都起了作用。原因是:

  • Jython下面是同样的旧Java。在沉重的Jython机器下,它所有强大的线程机制和数据结构都不会收支平衡
  • Jython的线程以Java线程为基础,并添加了一些上层结构,使它们能够使用Python线程API。(没有更好的方法使移植线程化Python代码更容易)但这两种线程的本质是相似的。除了Jython线程 。。。没有优先级,没有线程组,不能销毁、停止、挂起、恢复或中断线程


Python习惯用法可能更方便一些,因为,例如,如果您希望执行与
synchronized(some_object){…}
等效的操作,则有一个,它的可读性可能比使用更差。

我已经用一个示例进行了尝试

要求:
  • 您应该拥有JDK 7或更高版本,来自()
  • 您应该从()安装最新的Jython版本

请在

中找到完整的代码这是一个很好的问题,老实说,我不知道答案,但我两者都使用了多线程,所以可能更好的问题是:
我需要使用python多处理还是Java的线程
?我肯定它能用,只是不确定你要用哪一个,因为jython是两者的混合体。你是说jython还是jython?顺便说一句,这是一种不太适合SO的开放式问题。根据[This question(),答案是肯定的。我知道可以通过jython访问python多线程库或java并发支持。我编辑了这个问题,我是说jython,sorry@Lostsoul(和纳西奥)当谈到不同的python方言时,最好是具体一点,在通常的c版本中使用
cpython
。GIL只是该方言的一个限制(无可否认是占主导地位的)。真正的并发线程在Jython、IronPython等语言下工作得很好(尽管据我所知,没有一个特定的内存模型,所以这是有问题的。我不想假定主机平台的内存模型适用于解释器)
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())