多线程:两个线程与嵌套线程 Python
Multi Threading: Two Threads vs Nested Threads Python
我想尽可能加快我的程序。有人可以帮助我在速度方面会更好吗?根据我的要求,我可以采用任何方法。
方法 1(从主进程生成 2 个线程):
def a(something):
# Does something at fixed interval
while 1:
print("a")
time.sleep(60)
def b(something):
# Keeps running for infinitely without any delay.
while 1:
print("b")
def main():
something = {}
t1 = threading.Thread(target=b, args=(something,))
t1.start()
t2 = threading.Thread(target=a, args=(something,))
t2.start()
方法 2(生成嵌套线程):
def a(something):
# Does something at fixed interval
while 1:
print("a")
time.sleep(60)
def b(something):
t2 = threading.Thread(target=a, args=(something,))
t2.start()
# Keeps running for infinitely without any delay.
while 1:
print("b")
def main():
something = {}
t1 = threading.Thread(target=b, args=(something,))
t1.start()
P.S。 a 和 b 只是虚拟函数,但以类似的方式做事。
我建议您研究多处理,而不是多重威胁,而较重的 python 线程实际上只会 运行 在一个 CPU 核心中,无论您使用多少线程.这是由于 GIL 锁,这就是为什么使用多处理来解决这个问题。
另一种方法是使用 PyPy,它是一种不同于官方的 python 实现,在某些情况下具有加速并且没有 GIL,这可以提高多线程效率
线程的共存是扁平的,不是分层的。一个线程不在另一个线程中运行。 (我很确定CPython就是这种情况,如果有人能检查一下就好了)。
换句话说,在 主线程 中生成的线程与在任何其他线程中生成的线程(您所指的 嵌套线程).
关于您的两种方法之间的其他小差异(例如全局变量与局部变量),它们几乎不会影响速度。
最后,在这个 特定情况下,多线程将按预期工作,Python 臭名昭著的 GIL 锁不会有任何影响(time.sleep()
阻塞将通过重新安排线程来避免。
我想尽可能加快我的程序。有人可以帮助我在速度方面会更好吗?根据我的要求,我可以采用任何方法。
方法 1(从主进程生成 2 个线程):
def a(something):
# Does something at fixed interval
while 1:
print("a")
time.sleep(60)
def b(something):
# Keeps running for infinitely without any delay.
while 1:
print("b")
def main():
something = {}
t1 = threading.Thread(target=b, args=(something,))
t1.start()
t2 = threading.Thread(target=a, args=(something,))
t2.start()
方法 2(生成嵌套线程):
def a(something):
# Does something at fixed interval
while 1:
print("a")
time.sleep(60)
def b(something):
t2 = threading.Thread(target=a, args=(something,))
t2.start()
# Keeps running for infinitely without any delay.
while 1:
print("b")
def main():
something = {}
t1 = threading.Thread(target=b, args=(something,))
t1.start()
P.S。 a 和 b 只是虚拟函数,但以类似的方式做事。
我建议您研究多处理,而不是多重威胁,而较重的 python 线程实际上只会 运行 在一个 CPU 核心中,无论您使用多少线程.这是由于 GIL 锁,这就是为什么使用多处理来解决这个问题。
另一种方法是使用 PyPy,它是一种不同于官方的 python 实现,在某些情况下具有加速并且没有 GIL,这可以提高多线程效率
线程的共存是扁平的,不是分层的。一个线程不在另一个线程中运行。 (我很确定CPython就是这种情况,如果有人能检查一下就好了)。
换句话说,在 主线程 中生成的线程与在任何其他线程中生成的线程(您所指的 嵌套线程).
关于您的两种方法之间的其他小差异(例如全局变量与局部变量),它们几乎不会影响速度。
最后,在这个 特定情况下,多线程将按预期工作,Python 臭名昭著的 GIL 锁不会有任何影响(time.sleep()
阻塞将通过重新安排线程来避免。