I started studying python a couple of month ago, then I found Jython.
Do threads work properly in Jython, since it doesn't have a GIL? If so, can you suggest a good book on concurrency (threading)?
I started studying python a couple of month ago, then I found Jython.
Do threads work properly in Jython, since it doesn't have a GIL? If so, can you suggest a good book on concurrency (threading)?
我遇到的关于多线程的最好的书是《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上的“The Definitive Guide to Jython” ……第 19 章是对并发性的介绍,第 10 章是关于 Java 和 Jython 的集成(提示:这非常容易)。
PS 最后一句话:大多数专家对这些事情的了解远多于我所说的摩尔定律的重要性正在被阿姆达尔定律所取代,简而言之,这意味着编写稳定且可扩展的真正并发程序的艰巨挑战将是不可避免的未来。使用聪明的代码分析工具可以让真正的(即线程)并发变得多么容易,我不能说,但是对这个主题的投资以及并发强加的迷人的、智力的新推理学科可能会得到回报……如果你喜欢挑战。
我已经用一个例子试过了。
要求: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中找到完整代码
最初令人困惑的方面可能是您可以混合和匹配Java 和 Jython 的并发机制。但这一切似乎都奏效了。原因是:
...没有优先级,没有线程组,线程不能被销毁、停止、挂起、恢复或中断。[1]
Python 惯用语可能更方便一些,因为例如,如果您希望做 的等价物synchronized (some_object) { ... }
,则需要进行一些摆弄,这可能比使用RLock可读性差。